【问题标题】:Java program to download images from a website and display the file sizes用于从网站下载图像并显示文件大小的 Java 程序
【发布时间】:2013-01-10 14:14:42
【问题描述】:

我正在创建一个 java 程序,它将从 URL 读取 html 文档并在代码中显示图像的大小。不过,我不确定如何实现这一目标。

我不需要实际下载和保存图像,我只需要它们在网页上出现的大小和顺序。

例如: 一个网页有 3 张图片

<img src="dog.jpg" /> //which is 54kb
<img src="cat.jpg" /> //which is 75kb
<img src="horse.jpg"/> //which is 80kb

我需要显示我的 java 程序的输出

54kb
75kb
80kb

我应该从哪里开始?

p.s 我是个 java 新手

【问题讨论】:

    标签: java html html-parsing image htmlunit


    【解决方案1】:

    您可以使用正则表达式来查找标签并获取图像 URL。之后,您将需要 HttpUrlConnection 类来获取图像数据并测量其大小。

    【讨论】:

    • 然后我会循环这个方法直到它找不到更多图像吗?
    【解决方案2】:

    你可以这样做:

    try {
        URL urlConn = new URL("http://yoururl.com/cat.jpg");
        URLConnection urlC = urlConn.openConnection();
        System.out.println(urlC.getContentLength());
    } catch (MalformedURLException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
    

    【讨论】:

    • 我的问题是图片的 url 会变成一个随机的动物名称,在下载之前不会知道它
    【解决方案3】:

    你应该把你的问题分解成 3 个子问题

    1. DownloadHTML 文档
    2. Parse the HTML 记录并查找图片
    3. Download the imagesdetermine its size

    【讨论】:

    • 嗯。谢谢,生病看看这个并回复你。看起来我应该能够解决这个问题
    【解决方案4】:

    如果您是 Java 新手,您可能希望利用现有的库来简化操作。 Jsoup 允许您获取 HTML 页面并使用 CSS 样式的选择器提取元素。

    这只是一个快速且非常肮脏的示例,但我认为它将展示 Jsoup 可以轻松完成这样的任务。请注意,错误处理和响应代码处理被省略了,我只是想传递大致的想法:

    Document doc = Jsoup.connect("http://stackoverflow.com/questions/14541740/java-program-to-download-images-from-a-website-and-display-the-file-sizes").get();
    
    Elements imgElements = doc.select("img[src]");
    Map<String, String> fileSizeMap = new HashMap<String, String>();
    
    for(Element imgElement : imgElements){
        String imgUrlString = imgElement.attr("abs:src");
        URL imgURL = new URL(imgUrlString);
        HttpURLConnection httpConnection = (HttpURLConnection) imgURL.openConnection();
        String contentLengthString = httpConnection.getHeaderField("Content-Length");
        if(contentLengthString == null)
            contentLengthString = "Unknown";
    
        fileSizeMap.put(imgUrlString, contentLengthString);
    }
    
    for(Map.Entry<String, String> mapEntry : fileSizeMap.entrySet()){
        String imgFileName = mapEntry.getKey();
        System.out.println(imgFileName + " ---> " + mapEntry.getValue() + " bytes");
    }
    

    您也可以考虑查看Apache HttpClient。我发现它通常比原始 URLConnection/HttpURLConnection 方法更可取。

    【讨论】:

      猜你喜欢
      • 2014-06-24
      • 1970-01-01
      • 1970-01-01
      • 2014-06-08
      • 1970-01-01
      • 1970-01-01
      • 2012-08-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多