2 你再把你保存的这个目录路径设置回去
3 抓取网页
import javaioBufferedReader;
import javaioFile;
import javaioFileOutputStream;
import javaioInputStream;
import javaioInputStreamReader;
import javaioOutputStream;
import javanetURL;
import javanetURLConnection;
import javautilArrayList;
import javautilCalendar;
import javautilList;
import javautilregexMatcher;
import javautilregexPattern;
import comsunxmlinternalfastinfosetstaxeventsUtil;
public class CatchPicture {
public static void main(String[] args) {
// TODO Auto-generated method stub
//定义抓取的 正则表达式
String regular="[]<b></b><br/><img src=\"()\" border=0 alt=\'()\' style=\"\" class=\"\">
";
List<Picture> list=new CatchPicture()lookWeiboPic("><img src="111png" /> 引用的是同一目录下的,你上面那段代码根本就没输出到那个目录当然找不到了。 对于一个项目来说有个专有的文件夹存放,比如在WebRoot的imageFolder下,那么你在输出流写的时候要指定好这个相对路径,然后页面上用<img src="/imageFolder/111png" />
通常来说解决方案是这样的:以一个上传的例子为例,首先会在xml文件中配置好上传文件的绝对路径(例如C:/XXDX/XX这样,将来部署到服务器上时,修改配置文件路径就好了)然后比如我们上传的都是用输入流写到xx/xx/war/upload中 (我看你后增加的代码中没有flush(),是不对的) 然后在页面jsp中用/upload/xxxpng取值,之所以这么取是因为“/”是war根目录,当然你要是用"/"那种方式你要查明白你现在的目录级别。给你发个我以前的工具类吧、
import javaawtimageBufferedImage;
import javaioByteArrayInputStream;
import javaioByteArrayOutputStream;
import javaioFile;
import javatextSimpleDateFormat;
import javautilDate;
import javaximageioImageIO;
import sunmiscBASE64Decoder;
import sunmiscBASE64Encoder;
public class ImageChange {
/
从path这个地址获取一张然后转为base64码
@param imgName 的名字 如:123gif(是带后缀的)
@param path 123gif存放的路径
@return
@throws Exception
/
public static String getImageFromServer(String imgName,String path)throws Exception{
BASE64Encoder encoder = new sunmiscBASE64Encoder();
File f = new File(path+imgName);
if(!fexists()){
fcreateNewFile();
}
BufferedImage bi = ImageIOread(f);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageIOwrite(bi, "gif", baos);
byte[] bytes = baostoByteArray();
return encoderencodeBuffer(bytes)trim();
}
/
将一个base64转换成保存在 path 文件夹下 名为imgNamegif
@param base64String
@param path 是一个文件夹路径
@param imgName 名字(没有后缀)
@throws Exception
/
public static String savePictoServer(String base64String,String path,String imgName)throws Exception{
BASE64Decoder decoder = new sunmiscBASE64Decoder();
byte[] bytes1 = decoderdecodeBuffer(base64String);
ByteArrayInputStream bais = new ByteArrayInputStream(bytes1);
BufferedImage bi1 =ImageIOread(bais);
Date timeCur = new Date();
SimpleDateFormat fmtYY = new SimpleDateFormat("yyyy");
SimpleDateFormat fmtMM = new SimpleDateFormat("MM");
SimpleDateFormat fmtDD = new SimpleDateFormat("dd");
String strYY = fmtYYformat(timeCur);
String strMM = fmtMMformat(timeCur);
String strDD = fmtDDformat(timeCur);
String realPath = path+"/"+strYY+"/"+strMM+"/"+strDD;
File dir=new File(realPath);
if(!direxists()){
dirmkdirs();
}
String fileName=path+"\\"+strYY+"\\"+strMM+"\\"+strDD +"\\"+imgName+"gif";
File w2 = new File(fileName);//可以是jpg,png,gif格式
ImageIOwrite(bi1, "jpg", w2);//不管输出什么格式,此处不需改动
return fileName;
}
public static void main(String[] args) throws Exception {
Systemoutprintln(getImageFromServer("001001gif","d:"));
}
}应该把“//”改为“\\”,虽然“/”在java中相当于系统中的“\”,但是改为“/”后依然会报错,而“\\”则会转义为“\”,如下:
Image im=ToolkitgetDefaultToolkit()getImage(PanelclassgetResource("\\qqjpg"));//正确
Image im=ToolkitgetDefaultToolkit()getImage(PanelclassgetResource("/qqjpg"));//依然报错最原始的方法可以遍历所有盘符文件
public class Path
{
private final List<File> list=new ArrayList<File>();
private String directory;
public Path(String s)
{
thisdirectory=s;
}
private void genPath()
{
File[] roots=FilelistRoots();
for(File root:roots)
searchExists(root);
}
private void searchExists(File file)
{
String tempPath=filegetAbsolutePath();
if(tempPathcontains(directory)
&&(tempPathsubstring(tempPathlastIndexOf(directory))equals(directory)))
listadd(file);
if(fileisDirectory()&&filelist()!=null)
{
File[] files=filelistFiles();
for(File f:files)
{
searchExists(f);
}
}
}
public void listPath()
{
genPath();
for(File file:list)
Systemoutprintln(filegetAbsolutePath());
}
public static void main(String[] args) throws UnsupportedEncodingException
{
Path p=new Path("CS16");
plistPath();
}
}
测试正确,但性能太差,考虑用好的文件查找算法和多线程来作
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)