我正在创建一个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新手
答案 0 :(得分:3)
你应该把问题分成3个子问题
答案 1 :(得分:3)
如果您是Java新手,您可能希望利用现有的库来简化操作。 Jsoup允许您使用CSS样式选择器获取HTML页面并提取元素。
这只是一个快速且非常的脏例子,但我认为它将显示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方法。
答案 2 :(得分:1)
您可以使用正则表达式查找标记并获取图片网址。之后你需要和HttpUrlConnection类来获取图像数据并测量它的大小。
答案 3 :(得分:1)
你可以这样做:
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();
}