在Java中,可以在下载之前确定网页的大小吗?

时间:2011-05-05 18:13:22

标签: java download size

我想确定一个网页的大小,所以,如果它大于一个数字(例如:5MB),我会下载或不下载。 我可以提供这些信息吗?

2 个答案:

答案 0 :(得分:6)

你可以用:

做一个不错的近似
HttpURLConnection content = (HttpURLConnection) new URL("www.example.com").openConnection();
System.out.println(content.getContentLength());

但是,这只会告诉您要请求的特定资源的长度(例如,URL底部的HTML)。 您还需要浏览页面中的HTML,查看它引用的所有资源(来自其他网站的脚本,图片,视频等)并将它们全部加起来。

这会让你相当接近一个总大小,但即便如此,你也不会得到一个完美的计数,因为(a)并非所有的URL都会返回这些信息而你无法控制它, (b)根据内容的加载方式(例如通过隐藏详细信息的AJAX调用),您将无法提前知道要下载的完整资源列表。

或者,如果URL没有返回结果,我认为Giacomo建议使用CounterInputStream。不错的主意。您可以将上述建议与CounterInputStream结合使用,以保持已发送总数的计数,并在达到指定的最大总传输大小时可能停止传输。这样你基本上有一个预测的大小(比如一个站点告诉你它将是3.3 MB),但是当你下载时你发现它实际上是6 MB并且还没有停止,并做出决定不要下载了。

答案 1 :(得分:4)

我可能错了,但你不能只使用

HttpURLConnection conn = (HttpURLConnection) new URL("http://www.google.com").openConnection();
System.out.println(conn.getContentLength());