其实原本是将网页中所有图片保存到指定目录。已经通过使用htmlparser,能将所有图片的URL地址分离出来了,测试代码如下:
import org.htmlparser.* ;
import org.htmlparser.tags.* ;
import org.htmlparser.util.ParserException ;
import java.io.IOException; public class GetUrl
{ //将网页的图片URL打印出来
public static void main(String[] args)
{
//便于测试方便,列出多组
String[] url= new String[4] ;
url[0] = "http://www.sina.com.cn";
url[1] = "http://www.google.com";
url[2] = "http://ent.sina.com.cn" ;
url[3] = "http://www.baidu.com" ;
String currentUrl = url[2] ;
String[] encoding = new String[4] ;
encoding[0] = "8859_1";
encoding[1] = "gb2312";
encoding[2] = "big5" ;
encoding[3] = "EUC-CN" ;
String currentEncoding = encoding[1] ;
//引入htmlparser,分离<img>标示
Parser parser = new Parser() ;
try
{
parser.setURL(currentUrl) ;
parser.setEncoding(currentEncoding) ;
Node[] images = parser.extractAllNodesThatAre (ImageTag.class);
if (images.length!=0)
{
for (int i = 0; i < images.length; i++)
{
ImageTag imageTag = (ImageTag)images[i];
System.out.println("imageURl="+imageTag.getImageURL());
}
}
else
{
System.out.println("not found <img>!") ;
}
}
catch(ParserException parserException)
{
System.out.println("parserException in parsing <img> ") ;
System.out.println(parserException.getMessage());
}
catch(Exception e)
{
System.out.println("java exception in parsing <img>") ;
System.out.println(e.getClass());
}
}
}现在要实现保存,看来要先能分离出URL中图片的名字,然后才行。
不知道该怎么办了,菜鸟请各位多多指教!
import org.htmlparser.* ;
import org.htmlparser.tags.* ;
import org.htmlparser.util.ParserException ;
import java.io.IOException; public class GetUrl
{ //将网页的图片URL打印出来
public static void main(String[] args)
{
//便于测试方便,列出多组
String[] url= new String[4] ;
url[0] = "http://www.sina.com.cn";
url[1] = "http://www.google.com";
url[2] = "http://ent.sina.com.cn" ;
url[3] = "http://www.baidu.com" ;
String currentUrl = url[2] ;
String[] encoding = new String[4] ;
encoding[0] = "8859_1";
encoding[1] = "gb2312";
encoding[2] = "big5" ;
encoding[3] = "EUC-CN" ;
String currentEncoding = encoding[1] ;
//引入htmlparser,分离<img>标示
Parser parser = new Parser() ;
try
{
parser.setURL(currentUrl) ;
parser.setEncoding(currentEncoding) ;
Node[] images = parser.extractAllNodesThatAre (ImageTag.class);
if (images.length!=0)
{
for (int i = 0; i < images.length; i++)
{
ImageTag imageTag = (ImageTag)images[i];
System.out.println("imageURl="+imageTag.getImageURL());
}
}
else
{
System.out.println("not found <img>!") ;
}
}
catch(ParserException parserException)
{
System.out.println("parserException in parsing <img> ") ;
System.out.println(parserException.getMessage());
}
catch(Exception e)
{
System.out.println("java exception in parsing <img>") ;
System.out.println(e.getClass());
}
}
}现在要实现保存,看来要先能分离出URL中图片的名字,然后才行。
不知道该怎么办了,菜鸟请各位多多指教!
就是要弄出 文件名+扩展名;不然,下一步我参考网上用来保存HTML文件的一个实现方案,但是,那个文件名必须要由人工定义,那肯定不是这个程序要的功能。
附:
import java.io.*;
import java.net.*;
import java.util.*;/**
* 将指定的HTTP网络资源在本地以文件形式存放
*/
public class HttpGet { public final static boolean DEBUG = true;//调试用
private static int BUFFER_SIZE = 8096;//缓冲区大小
private Vector vDownLoad = new Vector();//URL列表
private Vector vFileList = new Vector();//下载后的保存文件名列表 /**
* 构造方法
*/
public HttpGet() { } /**
* 清除下载列表
*/
public void resetList() {
vDownLoad.clear();
vFileList.clear();
} /**
* 增加下载列表项
*/
public void addItem(String url, String filename) {
vDownLoad.add(url);
vFileList.add(filename);
} /**
* 根据列表下载资源
*/
public void downLoadByList() {
String url = null;
String filename = null;
//按列表顺序保存资源
for (int i = 0; i < vDownLoad.size(); i++) {
url = (String) vDownLoad.get(i);
filename = (String) vFileList.get(i); try {
saveToFile(url, filename);
}
catch (IOException err) {
if (DEBUG) {
System.out.println("资源[" + url + "]下载失败!!!");
}
}
} if (DEBUG) {
System.out.println("下载完成!!!"); }
} /**
* 将HTTP资源另存为文件
*/
public void saveToFile(String destUrl, String fileName) throws IOException {
FileOutputStream fos = null;
BufferedInputStream bis = null;
HttpURLConnection httpUrl = null;
URL url = null;
byte[] buf = new byte[BUFFER_SIZE];
int size = 0;
//建立链接
url = new URL(destUrl);
httpUrl = (HttpURLConnection) url.openConnection();
//连接指定的资源
httpUrl.connect();
//获取网络输入流
bis = new BufferedInputStream(httpUrl.getInputStream());
//建立文件
fos = new FileOutputStream(fileName); if (this.DEBUG)
System.out.println("正在获取链接[" + destUrl + "]的内容...\n将其保存为文件[" + fileName + "]"); //保存文件
while ( (size = bis.read(buf)) != -1)
fos.write(buf, 0, size);
fos.close();
bis.close();
httpUrl.disconnect();
} /**
* 主方法(用于测试)
*/
public static void main(String argv[]) { HttpGet oInstance = new HttpGet();
try {
//增加下载列表(此处用户可以写入自己代码来增加下载列表)
oInstance.addItem("http://gimg.baidu.com/img/net.gif","./testimg.gif");
//问题就在这里了,能否在这程序的基础上改进,./testimg.gif可由程序判断并实现呢?
//开始下载
oInstance.downLoadByList();
}
catch (Exception err) {
System.out.println(err.getMessage());
} }}
获取出图片的文件名之后,存储到本机上可以如下实现:
BufferedImage temp = javax.imageio.ImageIO.read(URL url);
File file = new File(filePath);//该文件要存储的路径
javax.imageio.ImageIO.write(temp,format,file);//其中format为该文件类型的后缀,如jpg,gif,png, Java里面支持的图像类型