java获取文件大小的方法
目前Java获取文件大小的方法有两种:
1、通过file的length()方法获取;
2、通过流式方法获取;
通过流式方法又有两种,分别是旧的java.io.*中FileInputStream的available()方法和新的java..nio.*中的FileChannel
下面依次介绍这几种方法:
首先选择一个文件并查看这个文件在windows中显示的大小,为了测试准确性,我这里选取了一个大文件(超过2GB)
查看这个文件在windows中显示的大小:
使用在线转换工具将其转换成字节:
可以看出这个文件的实际大小是3265574912Byte,下面通过代码来获取文件大小,并进行比较:
一、通过length方法:
1、创建一个文件:
1 File file = new File("E:\\全部软件\\软件压缩包\\Windows7_W64_SP1_ent.iso");
2、获取文件大小:
/*** 获取文件长度* @param file*/public static void getFileSize1(File file) { if (file.exists() && file.isFile()) { String fileName = file.getName(); System.out.println("文件"+fileName+"的大小是:"+file.length()); } }
3、查看结果:
可见,使用length方法获取的文件大小与windows中显示的大小一致!
二、通过file.io.*中的流式方法获取
1、创建一个文件
依旧使用上面的文件
File file = new File("E:\\全部软件\\软件压缩包\\Windows7_W64_SP1_ent.iso");
2、使用available方法获取:
/*** 根据java.io.*的流获取文件大小* @param file*/public static void getFileSize2(File file){ FileInputStream fis = null; try { if(file.exists() && file.isFile()){ String fileName = file.getName(); fis = new FileInputStream(file); System.out.println("文件"+fileName+"的大小是:"+fis.available()+"\n"); } } catch (Exception e) { e.printStackTrace(); }finally{ if(null!=fis){ try { fis.close(); } catch (IOException e) { e.printStackTrace(); } } } }
3、查看结果:
通过这种方法获取的文件大小是2147483647,很明显,这是int类型所能表示的最大值2^31-1,究其原因是因为文件的大小超过了int所能表示的最大值!!!
file.length()方法返回的类型:
available()方法返回的类型:
三、通过file.nio.*中的FileChannel工具来获取文件大小:
1、创建一个文件
依旧使用相同的大文件:
File file1 = new File("E:\\全部软件\\软件程序\\httpwatch.exe");
2、使用FileChannel获取文件大小:
/*** 根据java.nio.*的流获取文件大小* @param file*/public static void getFileSize3(File file){ FileChannel fc = null; try { if(file.exists() && file.isFile()){ String fileName = file.getName(); FileInputStream fis = new FileInputStream(file); fc = fis.getChannel(); System.out.println("文件"+fileName+"的大小是:"+fc.size()+"\n"); } } catch (Exception e) { e.printStackTrace(); }finally{ if(null!=fc){ try { fc.close(); } catch (IOException e) { e.printStackTrace(); } } } }
3、查看结果:
可见通过这种方法获取的文件大小和第一种一样,都能获取文件实际大小。
四、使用小文件测试以上三种方法:
以上情况中文件大小超过了available()返回类型int的最大值,下面使用一个没有超过int最大值的文件测试,来验证通过这三种方法获取的大小是否和windows中显示的一致:
1、获取文件,查看其在windows中的大小:
2、将该文件单位转成Byte:
可见该文件总共有28147712个字节。
3、查看通过三种方法获取的结果:
根据结果得知,三种方法获取的大小一致,只是跟文件的实际大小有一些误差!!
本以为是文件类型的原因,于是又试了大小差不多的不同类型文件,结果发现绝大多数情况下只有300M以上的文件才能获取最准确的文件大小,300M以下的都会有一定的误差!
参考了http://blog.csdn.net/chaijunkun/article/details/22387305这篇文章,但是里面没测试300M以下的文件。
下面是我使用不同大小的文件进行的测试,通过文件在windows中显示的大小、转化成单位Byte后与java获取的方式对比,并计算出误差值:
总结java获取文件大小:
1、三种方法获取小文件(300M以下)时结果一致,但是与windows显示的值有一定误差;
2、获取大文件时,为避免文件长度大于方法返回值类型的最大值,尽量使用length或FileChannel方法获取;
如果看到这篇文章的你对此文有质疑,欢迎提出疑问~
转载于:https://www.cnblogs.com/firstdream/p/8710762.html
java获取文件大小的方法相关推荐
- java中测长度的方法,java获取文件大小的几种方法
目前java获取文件大小的方法有两种: 1.通过file的length()方法获取: 2.通过流式方法获取: 通过流式方法又有两种,分别是旧的java.io.*中fileinputstream的ava ...
- java 获取文件的大小kb_java获取文件大小的方法
java获取文件大小的方法 目前Java获取文件大小的方法有两种: 1.通过file的length()方法获取: 2.通过流式方法获取: 通过流式方法又有两种,分别是旧的java.io.*中FileI ...
- java获取文件大小_Java实现获取文件大小的几种方法
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 目前Java获取文件大小的方法有两种: 1.通过file的length()方法获取: 2.通过流式方法获取: 通过流式方法又有两种,分别是旧的java.i ...
- java获取文件大小_Java中获取文件大小的详解及实例代码
Java 获取文件大小 今天写代码时需要实现获取文件大小的功能,目前有两种实现方法,一种是使用File的length()方法:另外一种是使用FileInputStream的available()方法, ...
- java获取文件大小_Java获取文件大小
java获取文件大小 Today we will look into different ways to get file size in Java. 今天,我们将研究使用Java获取文件大小的不同方 ...
- Java 获取文件大小
Java 获取文件大小 本文介绍几种方法获取文件大小,分别是java io 和 nio 以及第三方库实现. 标准的java io 首先开始一个简单实例计算文件大小,使用File.lenght()方法: ...
- php study 直接显示代码_PHP获取文件大小的方法详解(附视频)
本篇文章主要给大家介绍PHP获取文件大小以及封装获取正常大小的具体方法. 对于初入门的PHP新手来说,PHP获取文件大小这个功能实现,或许有一定的难度.但是相信新手小白们在看过本篇文章介绍后,一定能轻 ...
- php js获取文件大小,js+ajax实现获取文件大小的方法_javascript技巧
本文实例讲述了js+ajax实现获取文件大小的方法.分享给大家供大家参考,具体如下: 顾名思义,通过JS和Ajax来获取上传文件的大小,在上传之前可以有个判断,对上传的文件有所控制,因为js控制文件大 ...
- linux java获取路径_linux中java获取路径的方法
linux中java获取路径的方法 发布时间:2020-05-06 11:11:26 来源:亿速云 阅读:700 作者:小新 今天小编给大家分享的是linux中java获取路径的方法,相信很多人都不太 ...
最新文章
- Centos 7.2搭建HTTP服务,并进行相关配置
- Windows Server 2008 R2 做开发需要开启那些角色和组件
- iOS开发系列--无限循环的图片浏览器
- 特征层次分析、视觉特征语义探索(微调+预训练)
- Java Optional学习笔记
- DRBD+keepalived+LAMP+discuz
- jQeury 批量删除
- 大龄开发者究竟该何去何从?2019年Python全栈工程师,都是开发人员改怎么转向高收入?
- 函数除颤/节流提高性能 + 原生实现滚动时到视口时展现
- Spark Streaming实例
- Python编程之输出素数
- Android开发学习总结——appcompat_v7项目说明
- 计算机的桌面图标设置在哪里,电脑小图标怎么设置在哪里
- 用c语言找最大素数,C语言实现寻找大素数
- 桌面版linux装哪个版本好用,linux桌面版哪个版本好用?
- 循环链表解决约瑟夫问题
- 查看硬盘序列号的方法 和查看设备序列号的方法
- 中国文学通史之各个阶段介绍
- 共建“医疗合规科技实验室”,美创科技实力护航医疗数据安全
- 局部最优点+鞍点+学习率的调节
热门文章
- android 广播 更新ui,详解Android UI更新的几种方法
- BZOJ 4698 Sdoi2008 Sandy的卡片
- Java中IO的快速复习(代码+注释)
- jpress-项目升级
- oracle11g回闪,oracle11gdroptable后闪回-Oracle
- Ceph 故障排查笔记 | 万字经验总结
- 〖Python自动化办公篇⑤〗- 文件自动化管理 - 清理重复的文件与批量修改文件名
- 阿里云对象存储(oos)
- 多条ADSL线路合并叠加效果测试,多WAN口聚合
- Spine的默认材质Spine/Skeleton有毛边问题