文档章节

java 获取网络文件大小

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


© 著作权归作者所有

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

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

阿豪boy
07/10
0
0
一句话讲清楚什么是JavaEE

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

qq58edeba279279
06/26
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
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
通过jstack日志分析和问题排查

简介 jstack用于生成java虚拟机当前时刻的线程快照。线程快照是当前java虚拟机内每一条线程正在执行的方法堆栈的集合,生成线程快照的主要目的是定位线程出现长时间停顿的原因,如线程间死锁...

谢思华
06/29
0
0

没有更多内容

加载失败,请刷新页面

加载更多

【大福利】极客时间专栏返现二维码大汇总

我已经购买了如下专栏,大家通过我的二维码你可以获得一定额度的返现! 然后,再给大家来个福利,只要你通过我的二维码购买,并且关注了【飞鱼说编程】公众号,可以加我微信或者私聊我,我再...

飞鱼说编程
今天
1
0
Spring5对比Spring3.2源码之容器的基本实现

最近看了《Spring源码深度解析》,该书是基于Spring3.2版本的,其中关于第二章容器的基本实现部分,目前spring5的实现方式已有较大改变。 Spring3.2的实现: public void testSimpleLoad(){...

Ilike_Java
今天
1
0
【王阳明心学语录】-001

1.“破山中贼易,破心中贼难。” 2.“夫万事万物之理不外于吾心。” 3.“心即理也。”“心外无理,心外无物,心外无事。” 4.“人心之得其正者即道心;道心之失其正者即人心。” 5.“无...

卯金刀GG
今天
2
0
OSChina 周三乱弹 —— 我们无法成为野兽

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @ _刚刚好: 霸王洗发水这波很骚 手机党少年们想听歌,请使劲儿戳(这里) hahahahahahh @嘻酱:居然忘了喝水。 让你喝可乐的话, 你准忘不了...

小小编辑
今天
10
0
vm GC 日志 配置及查看

-XX:+PrintGCDetails 打印 gc 日志 -XX:+PrintTenuringDistribution 监控晋升分布 -XX:+PrintGCTimeStamps 包含时间戳 -XX:+printGCDateStamps 包含时间 -Xloggc:<filename> 可以将数据保存为......

Canaan_
昨天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部