文档章节

java 获取网络文件大小

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


© 著作权归作者所有

共有 人打赏支持
谢思华
粉丝 58
博文 156
码字总数 120017
作品 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

Oracle Java SE 8 发行版更新:限制商业或生产用途

Oracle Java SE 8 发行版更新 Oracle Java SE 8 的公开更新仍面向单独的个人使用提供,至少持续至 2020 年底。 2019 年 1 月以后发布的 Oracle Java SE 8 公开更新将不向没有商用许可证的业务...

抢小孩糖吃 ⋅ 04/18 ⋅ 61

14、Java并发性和多线程-Java ThreadLocal

以下内容转自http://ifeve.com/java-theadlocal/: Java中的ThreadLocal类可以让你创建的变量只被同一个线程进行读和写操作。因此,尽管有两个线程同时执行一段相同的代码,而且这段代码又有...

easonjim ⋅ 2017/06/16 ⋅ 0

RMI:Java中的分布式计算框架

RMI全称是Remote Method Invocation-远程方法调用,Java RMI在JDK1.1中实现的,其威力就体现在它强大的开发分布式网络应用的能力上,是纯Java的网络分布式应用系统的核心解决方案之一。其实...

qq_39521554 ⋅ 05/15 ⋅ 0

Java程序员必读书单,家族又添新成员

点击关注异步图书,置顶公众号 每天与你分享IT好书 技术干货 职场知识 参与文末话题讨论,每日赠送异步图书。 ——异步小编 有些革命出其不意地吸引了全世界的眼球。Twitter、Linux操作系统和...

异步社区 ⋅ 05/09 ⋅ 0

ThreadLocal源码分析

阅读原文请访问我的博客 BrightLoong's Blog 一. 简介 提醒篇幅较大需耐心。 简介来自ThreadLocal类注释 ThreadLocal类提供了线程局部 (thread-local) 变量。这些变量与普通变量不同,每个线...

BrightLoong ⋅ 05/28 ⋅ 0

培训云计算学校,虚拟机基本结构讲解

我们要对JVM虚拟机的结构有一个感性的认知。毕竟我们不是编程人员,认知程度达不到那么深入。一个运行时的Java虚拟机实例的天职是:负责运行一个java程序。当启动一个Java程序时,一个虚拟机...

长沙千锋 ⋅ 05/17 ⋅ 0

Java编程基础知识点和技术点归纳

Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于PC、数据中心、游戏控制台、科学超级计算机、移动电话和互...

Java小辰 ⋅ 05/23 ⋅ 0

ubuntu16.0.4不能上网和jdk1.8环境配置

转载自: https://jingyan.baidu.com/article/6c67b1d68facbb2786bb1e7b.html 虽然设置的时候图标位置可能不太一样,但是操作步骤一样的,网上有说让在Windows下查看一下vmware的网络服务是否...

u011976443 ⋅ 05/25 ⋅ 0

Netweaver和CloudFoundry是如何运行Web应用的?

Netweaver 在Jerry的微信公众号文章SAP Fiori应用的三种部署方式里提到SAP Fiori应用以BSP应用的方式部署在ABAP Front-End Server上。那么这些BSP应用在运行时为什么能够接受和发送HTTP请求呢...

JerryWang_SAP ⋅ 06/16 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Jenkins实践3 之脚本

#!/bin/sh# export PROJ_PATH=项目路径# export TOMCAT_PATH=tomcat路径killTomcat(){pid=`ps -ef | grep tomcat | grep java|awk '{print $2}'`echo "tom...

晨猫 ⋅ 今天 ⋅ 0

Spring Bean的生命周期

前言 Spring Bean 的生命周期在整个 Spring 中占有很重要的位置,掌握这些可以加深对 Spring 的理解。 首先看下生命周期图: 再谈生命周期之前有一点需要先明确: Spring 只帮我们管理单例模...

素雷 ⋅ 今天 ⋅ 0

zblog2.3版本的asp系统是否可以超越卢松松博客的流量[图]

最近访问zblog官网,发现zlbog-asp2.3版本已经进入测试阶段了,虽然正式版还没有发布,想必也不久了。那么作为aps纵横江湖十多年的今天,blog2.2版本应该已经成熟了,为什么还要发布这个2.3...

原创小博客 ⋅ 今天 ⋅ 0

聊聊spring cloud的HystrixCircuitBreakerConfiguration

序 本文主要研究一下spring cloud的HystrixCircuitBreakerConfiguration HystrixCircuitBreakerConfiguration spring-cloud-netflix-core-2.0.0.RELEASE-sources.jar!/org/springframework/......

go4it ⋅ 今天 ⋅ 0

二分查找

二分查找,也称折半查找、二分搜索,是一种在有序数组中查找某一特定元素的搜索算法。搜素过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜素过程结束;如果某一特定元素大于...

人觉非常君 ⋅ 今天 ⋅ 0

VS中使用X64汇编

需要注意的是,在X86项目中,可以使用__asm{}来嵌入汇编代码,但是在X64项目中,再也不能使用__asm{}来编写嵌入式汇编程序了,必须使用专门的.asm汇编文件来编写相应的汇编代码,然后在其它地...

simpower ⋅ 今天 ⋅ 0

ThreadPoolExecutor

ThreadPoolExecutor public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, ......

4rnold ⋅ 昨天 ⋅ 0

Java正无穷大、负无穷大以及NaN

问题来源:用Java代码写了一个计算公式,包含除法和对数和取反,在页面上出现了-infinity,不知道这是什么问题,网上找答案才明白意思是负的无穷大。 思考:为什么会出现这种情况呢?这是哪里...

young_chen ⋅ 昨天 ⋅ 0

前台对中文编码,后台解码

前台:encodeURI(sbzt) 后台:String param = URLDecoder.decode(sbzt,"UTF-8");

west_coast ⋅ 昨天 ⋅ 0

实验楼—MySQL基础课程-挑战3实验报告

按照文档要求创建数据库 sudo sercice mysql startwget http://labfile.oss.aliyuncs.com/courses/9/createdb2.sqlvim /home/shiyanlou/createdb2.sql#查看下数据库代码 代码创建了grade......

zhangjin7 ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部