java计算文件大小三种方法以及优缺点比较

1、通过File 的length() 方法计算文件大小;

2、使用FileInputStream后通过FileChannel的size()方法计算文件大小;

3、通过FileInputStream的available()方法计算文件大小;


代码示例:

package encryption;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.nio.channels.FileChannel;

public class Test02 {

	public static void main(String[] args) throws IOException {

		// 获取文件大小的三种方法
		
		//大文件
		String fileStr = "E:\\src\\cn_windows_7_ultimate_with_sp1_x64_dvd_618537.iso";
		//小文件
        String fileStr01 = "E:\\src\\Chrome-Goagent.7z";
		
		File file = new File(fileStr);

		long size01 = getFileSize01(file);
		long size02 = getFileSize02(file);
		int  size03 = getFileSize03(file);
		
		System.out.println("小文件计算文件大小");
		System.out.println("文件名称:"+file.getName());
		System.out.println("length方法获取文件大小:"+size01+" byte.");
		System.out.println("FileChannel方法获取文件大小:"+size02+" byte.");
		System.out.println("available方法获取文件大小:"+size03+" byte.");
		System.out.println("\nInteger类型数据的最大值:"+Integer.MAX_VALUE);

	}


	/*
	 * 获取文件大小的方法01:
	 * 通过文件的length() 方法获取文件大小,这个通常可以应用于本地文件的大小计算;
	 * */
	private static long getFileSize01(File file) {

		return file.length();
	}

	/*
	 * 获取文件大小的方法02:
	 * 通过FileChannel类来获取文件大小,这个方法通常结合输入流相关,
	 * 因此可以用于文件网络传输时实时计算文件大小;
	 * */ 
	private static long getFileSize02(File file) throws IOException {

		FileInputStream fis = new FileInputStream(file);
		FileChannel fc = fis.getChannel();
		return fc.size();
	}
	
	 /*
	  * 获取文件大小的方法03:
	  * FileInputStream的available()方法看可以用于小文件的文件大小计算,
	  * 因为available()的返回值类型为int型,可能会存在溢出的情况,
	  * 所以 available()方法计算文件大小不建议使用;
	  * */
		private static int getFileSize03(File file) throws IOException {

			FileInputStream fis = new FileInputStream(file);
			
			return fis.available();
		}
}


计算大文件时:cn_windows_7_ultimate_with_sp1_x64_dvd_618537.iso

大文件计算文件大小
文件名称:cn_windows_7_ultimate_with_sp1_x64_dvd_618537.iso
length方法获取文件大小:3419052032 byte.
FileChannel方法获取文件大小:3419052032 byte.
available方法获取文件大小:2147483647 byte.

Integer类型数据的最大值:2147483647

计算小文件时:Chrome-Goagent.7z
小文件计算文件大小
文件名称:Chrome-Goagent.7z
length方法获取文件大小:105959048 byte.
FileChannel方法获取文件大小:105959048 byte.
available方法获取文件大小:105959048 byte.

Integer类型数据的最大值:2147483647

优缺点比较:

1、length() 方法的返回值是long类型的,FileChannl的size()方法是long类型的,FileInputStream的available() 方法是int类型的;

2、在计算大文件的时候不能使用FileInputStream的available() 方法,这样计算结果会超出int类型最大值会产生溢出导致计算结果不准确;

3、在计算大文件的时候建议使用方法一和方法三,使用方法三会产生int类型溢出错误;

4、同时,在计算本地文件大小的时候建议使用方法一,length() 的方式计算文件大小;在计算网络传输文件的时候建议使用FileChannel的size() 方法,方法二包含在FileinputStream中使用具有较好的网络性能


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值