其实原本是将网页中所有图片保存到指定目录。已经通过使用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中图片的名字,然后才行。
不知道该怎么办了,菜鸟请各位多多指教!

解决方案 »

  1.   

    还要识别 MIME , 不然人家 URL 中如果有参数那就不知道是什么类型的图片了.
      

  2.   

    这个先不管吧
    就是要弄出 文件名+扩展名;不然,下一步我参考网上用来保存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());
        }  }}
      

  3.   

    你不是可以从 URL 中 url.toString().substring(url.toString().lastIndexOf('/')+1) 过滤 出 文件名么?
      

  4.   

    同意楼上的看法。
    获取出图片的文件名之后,存储到本机上可以如下实现:
    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里面支持的图像类型