下载并保存从给定URL到桌面的所有图像不能完全正常工作

时间:2014-02-08 08:17:26

标签: java

我有以下代码来解压缩并将here中的所有图像保存到我的桌面。
它在某种程度上起作用,即它只下载15个图像并停在那里。不确定为什么其他图像没有下载。我桌面上保存的最后一张图片是1402_NYFW_0300_GoRed_w95_h95_cw95_ch95_thumb.jpg

import java.io.BufferedReader;
import java.io.InputStreamReader;
import javax.swing.text.html.HTML;
import javax.swing.text.html.HTMLEditorKit;
import javax.swing.text.html.parser.ParserDelegator;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.net.URLConnection;
import javax.imageio.ImageIO;
import javax.swing.text.AttributeSet;
import javax.swing.text.html.HTMLDocument;

public class ExtractAllImages {
public static void main(String args[]) throws Exception {

    String webUrl = "http://ramp.sdr.co.za/cache/1402NYFW/GoRedForWomen/";
    URL url = new URL(webUrl);
    URLConnection connection = url.openConnection();
    InputStream is = connection.getInputStream();
    InputStreamReader isr = new InputStreamReader(is);
    BufferedReader br = new BufferedReader(isr);

    HTMLEditorKit htmlKit = new HTMLEditorKit();
    HTMLDocument htmlDoc = (HTMLDocument) htmlKit.createDefaultDocument();
    HTMLEditorKit.Parser parser = new ParserDelegator();
    HTMLEditorKit.ParserCallback callback = htmlDoc.getReader(0);
    parser.parse(br, callback, true);

    for (HTMLDocument.Iterator iterator = htmlDoc.getIterator(HTML.Tag.A); iterator.isValid(); iterator.next()) {
        AttributeSet attributes = iterator.getAttributes();
        String imgSrc = (String) attributes.getAttribute(HTML.Attribute.HREF);

        if (imgSrc != null && (imgSrc.endsWith(".jpg") || (imgSrc.endsWith(".png")) || (imgSrc.endsWith(".jpeg")) || (imgSrc.endsWith(".bmp")) || (imgSrc.endsWith(".ico")))) {
            try {
                downloadImage(webUrl, imgSrc);
            } catch (IOException ex) {
                System.out.println(ex.getMessage());
            }
        }
    }
}
private static void downloadImage(String url, String imgSrc) throws IOException {
    BufferedImage image = null;
    try {
        if (!(imgSrc.startsWith("http"))) {
            url = url + imgSrc;
        } else {
            url = imgSrc;
        }
        imgSrc = imgSrc.substring(imgSrc.lastIndexOf("/") + 1);
        String imageFormat = null;
        imageFormat = imgSrc.substring(imgSrc.lastIndexOf(".") + 1);
        String imgPath = null;
        imgPath = "C:/temp/" + imgSrc + "";
        URL imageUrl = new URL(url);
        image = ImageIO.read(imageUrl);
        if (image != null) {
            File file = new File(imgPath);
            ImageIO.write(image, imageFormat, file);
        }
    } catch (Exception ex) {
        ex.printStackTrace();
    }

}
}

1 个答案:

答案 0 :(得分:0)

好的,所以页面再次运行,我需要仔细看看。试试这个:

public static void main(String args[]) throws Exception {

String webUrl = "http://ramp.sdr.co.za/cache/1402NYFW/GoRedForWomen/";
URL url = new URL(webUrl);
URLConnection connection = url.openConnection();
InputStream is = connection.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);

HTMLEditorKit htmlKit = new HTMLEditorKit();
HTMLDocument htmlDoc = (HTMLDocument) htmlKit.createDefaultDocument();
htmlKit.read(br, htmlDoc, 0);

for (HTMLDocument.Iterator iterator = htmlDoc.getIterator(HTML.Tag.A); iterator.isValid(); iterator.next()) {
    AttributeSet attributes = iterator.getAttributes();
    String imgSrc = (String) attributes.getAttribute(HTML.Attribute.HREF);

    System.out.println(imgSrc);
    if (imgSrc != null && (imgSrc.toLowerCase().endsWith(".jpg") || (imgSrc.endsWith(".png")) || (imgSrc.endsWith(".jpeg")) || (imgSrc.endsWith(".bmp")) || (imgSrc.endsWith(".ico")))) {
        try {
            downloadImage(webUrl, imgSrc);
        } catch (IOException ex) {
            System.out.println(ex.getMessage());
        }
    }
}

}

我直接使用HTMLEditorKit的read()方法而不是使用回调。这似乎有效。