文档章节

java 获取网络文件大小

谢思华
 谢思华
发布于 2015/04/24 09:17
字数 561
阅读 656
收藏 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();      
}


© 著作权归作者所有

共有 人打赏支持
上一篇: Java对Map排序
下一篇: Java环境变量配置
谢思华
粉丝 64
博文 210
码字总数 135083
作品 0
广州
程序员
私信 提问
Java + apache ftpService+Flashfxp

谁写个Java + apache ftpService+Flashfxp 来显示上传功能。。 要求: 通过java来实现上传、必须要获取上传的信息、比如上传文件名,上传者,时间,文件大小等等、并将其数据插入到数据库中。...

Runing9520
2012/07/17
534
2
图片优化问题!java代码

现在有个问题,就是要用JAVA处理一些JPG或者是PNG的图片,但是这些图片都很精美的那种,分辨率比较高,一般都有几百K,但是我们想在网络上传送 这些图,主要是文件大小不能大,并且也不需要效...

苏别v
2015/07/09
170
1
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
ip2region 1.2.2发布,新增 golang 查询客户端

ip2region 1.2.2发布了。准确率99.9%的ip地址定位库,0.0x毫秒级查询,数据库文件大小只有1.5M,提供了java, php, c, python,nodejs,golang查询绑定和Binary,B树,内存三种查询算法,妈妈再也...

狮子的魂
2016/11/07
2.3K
34

没有更多内容

加载失败,请刷新页面

加载更多

矿难让显卡压了那么多货咋办?NV如是说

在苏州 GTC 开幕的几天前,英伟达刚刚遭遇了一次股价的腰斩。 近来加密货币的热度渐低,受到挖矿热潮照顾许多的英伟达「矿机」销量受到打击,甚至出现了严重的库存危机,加上近来刚刚发的 RT...

linux-tao
8分钟前
0
0
Python学习日记5|BeautifulSoup中find和find_all的用法

Python学习日记5|BeautifulSoup中find和find_all的用法 是蓝先生 关注 2016.04.20 11:26* 字数 930 阅读 37205评论 11喜欢 10 今天是4.20号。 前天晚上看到蒋方舟的一句话: 不要左顾右盼。慢...

linjin200
8分钟前
0
0
浅析Vue.js 中的条件渲染指令

1 应用于单个元素 Vue.js 中的条件渲染指令可以根据表达式的值,来决定在 DOM 中是渲染还是销毁元素或组件。 html: <div id="app"><p v-if="type===1">拌面</p><p v-else-if="type==...

开元中国2015
9分钟前
0
0
聊天机器人最难理解的 10 个词汇

简评:现在,越来越多的「聊天机器人」凭借着人工智能能与人类对话,甚至编写新闻。人们该如何判断对方是一个血肉之躯,还是一个可笑的算法?又该如何判断一个小说故事是由一台机器编写的,而...

极光推送
14分钟前
0
0
开源 java CMS - FreeCMS2.8会员我的评论

项目地址:http://www.freeteam.cn/ 我的评论 从左侧管理菜单点击我的评论进入。在这里可以查看当前登录会员的所有评论记录。 删除评论 选择评论然后点击删除按钮可以完成删除操作。 为了防止...

freeteam
38分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部