文档章节

java 获取网络文件大小

谢思华
 谢思华
发布于 2015/04/24 09:17
字数 561
阅读 585
收藏 0

1.网络文件大小的定义

访问目标URL,右键查看网络源文件,把文件源代码复制到新建的txt文档中;

改txt文档的大小为需要的网络文件大小


2.核心方法

代码如下:

1、在没有开放访问外网的条件下,需要加代理访问;

2、第一次连接返回不到数据的情况下,则连接第二次(下有解释原因);

3、提供两种取content-length的方式;

4、最后返回的数据保留了2位小数点;

/**
	 * 获取网络文件源码大小,不含图片等信息大小
	 * 通过代理访问,如果第一次获取不到数据,则连接第二次
	 * @param destUrl 网络html地址  ps:http://www.baidu.com.cn
	 * @return
	 * @author admin, 2015年4月16日.
	 */
	public static double getWebFileCount(String destUrl) {
		if(T.isBlank(destUrl)){
			return 0;
		}		
		double count = 0;
		try {	
		        //获取代理服务器地址、端口		 
			SocketAddress address = new InetSocketAddress(Config.getProxyHost(), Config.getProxyPort());  			  
			Proxy proxy = new Proxy(Proxy.Type.HTTP, address);
			URL url = new URL(destUrl); //创建URL
	        URLConnection urlConnection = url.openConnection(proxy);    //通过代理访问
	        int length = urlConnection.getContentLength();  //获取contentLength
	        //第二种获取content-length的方法,两种方法都可以用,如果是大文件,建议第二种方法
	        //String len = urlConnection.getHeaderField("content-length");  
	        if(length < 0){  //长度获取不到的时候重新连接
	        	urlConnection .setRequestProperty("Accept-Encoding", "identity"); 
		        urlConnection.connect();      
	        }
	        count = T.keep2DecimalPoints(length / 1024.0);    //单位KB,保留2位小数点   
		} catch (Exception e) {
			e.printStackTrace();
		}
		return count;
	}


3.二次连接原因

通过debug跟踪以上方法,会发现第一连接,返回的content-length=-1,第二次连接以上才会得到正确的数。因为:在默认情况下,HttpURLConnection 使用 gzip方式获取,文件 getContentLength() 这个方法,每次read完成后可以获得,当前已经传送了多少数据,而不能用这个方法获取 需要传送多少字节的内容,当read() 返回 -1时,读取完成,由于这个压缩后的总长度无法获取,那么就没法计算值了。要取得长度则,要求http请求不要gzip压缩,也就是代码的以下两句:

if (length < 0) {  //长度获取不到的时候重新连接
    urlConnection .setRequestProperty("Accept-Encoding", "identity"); 
    urlConnection.connect();      
}


© 著作权归作者所有

共有 人打赏支持
谢思华
粉丝 59
博文 188
码字总数 132179
作品 0
广州
程序员
springboot 上传文件

设置文件大小限制 配置文件加上 或者使用bean注解 设置限制大小和 默认存放目录 java 使用 MultipartFile file 获取文件,然后保存到当前目录下 java 先获取到文件列表,然后批量保存...

阿豪boy
07/10
0
0
centos Linux 统计文件夹大小

1、查看当前文件夹下面各个文件的大小 ll -lh 2、查看某文件夹占用总的空间大小 du -h --max-depth=1 /usr/local/ 8.0K /usr/local/etc 8.0K /usr/local/include 275M /usr/local/ 参数--max...

Jack088
04/19
0
0
一句话讲清楚什么是JavaEE

Java技术不仅是一门编程语言而且是一个平台。同时Java语言是一门有着特定语法和风格的高级的面向对象的语言,Java平台是Java语言编写的特定应用程序运行的环境。Java平台有很多种,很多的Jav...

qq58edeba279279
06/26
0
0
libcurl在android下的移植、编译与测试以及java接口的封装

curl是利用URL语法在命令行方式下工作的文件传输工具 它支持很多协议:FTP, FTPS, HTTP, HTTPS, GOPHER, TELNET, DICT, FILE 以及 LDAP。 curl同样支持HTTPS认证,HTTP POST方法, HTTP PUT...

zhoulc
2013/03/05
0
2
优化JDBC性能的一些基本原则

开发一个注重性能的JDBC应用程序不是一件容易的事. 当你的代码运行很慢的时候JDBC驱动程序并不会抛出异常告诉你。 本系列的性能提示将为改善JDBC应用程序的性能介绍一些基本的指导原则,这其...

hchen1982
2011/08/01
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

人生苦短:Python里的17个“超赞操作

人生苦短,我选Python”。那么,你真的掌握了Python吗? 1. 交换变量 有时候,当我们要交换两个变量的值时,一种常规的方法是创建一个临时变量,然后用它来进行交换。比如: # 输入 a = 5 b ...

糖宝lsh
38分钟前
4
0
咕泡-spring中常用设计模式概述

设计模式就是经验之谈,供后人借鉴,解决一些具有代表性的问题 设计模式来源于生活,反过来帮助我们更好生活 设计模式提升代码的可读性、可扩展性、维护成本、复杂业务问题 千万不要死记硬背...

职业搬砖20年
今天
2
0
day59-20180817-流利阅读笔记-待学习

假·照骗,真·社交焦虑 雪梨 2018-08-17 1.今日导读 发朋友圈之前,不少人为了展现更美好的生活状态会对照片加以“微调”,或是加个滤镜显得逼格更高,或是磨个皮瘦个脸拉个大长腿。现在,国...

aibinxiao
今天
19
0
OSChina 周五乱弹 —— 姑娘在这个节日里表白你接受么?

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @Sharon啊:完全被这个小姐姐圈粉了,学两首她的歌去哈哈 分享王贰浪的单曲《往后余生(翻自 马良)》 《往后余生(翻自 马良)》- 王贰浪 手...

小小编辑
今天
949
16
为什么HashMap要自己实现writeObject和readObject方法?

为什么HashMap要自己实现writeObject和readObject方法? 如果你有仔细阅读过HashMap的源码,那么你一定注意过一个问题:HashMap中有两个私有方法。 private void writeObject(java.io.Objec...

DemonsI
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部