android 获取文件大小
今天,简单讲讲android在读取文件时,如何获取文件大小。
目前有两种实现方法,一种是使用File的length()方法;另外一种是使用FileInputStream的available()方法,当InputStream未进行read操作时,available()的大小应该是等于文件大小的。但是在处理大文件时,后者会发生问题。我们来看一下:
首先选择一个文件并查看这个文件在windows中显示的大小,为了测试准确性,我这里选取了一个大文件(超过2GB)
查看这个文件在windows中显示的大小:
使用在线转换工具将其转换成字节:
可以看出这个文件的实际大小是3265574912Byte,下面通过代码来获取文件大小,并进行比较:
1.使用File的length()方法
public static void main(String[] args) {File f= new File("D:\\CentOS-6.5-x86_64-bin-DVD1.iso");if (f.exists() && f.isFile()){logger.info(f.length());}else{logger.info("file doesn't exist or is not a file");}
}
我们看一下输出结果:
3265574912Byte
二、通过file.io.*中的流式方法获取
接下来我们看一下通过FileInputStream来获取的文件大小:
public static void main(String[] args) {FileInputStream fis= null;try{File f= new File("D:\\CentOS-6.5-x86_64-bin-DVD1.iso");fis= new FileInputStream(f);logger.info(fis.available());}catch(Exception e){logger.error(e);} finally{if (null!=fis){try {fis.close();} catch (IOException e) {logger.error(e);}}}
}
下面是运行结果:
2147483647
这个结果是不是很眼熟?它是Integer.MAX_VALUE,也就是有符号整型能表示的最大数值。
那么换算成熟悉的单位,这种方式获取的文件大小是多大呢?
究其原因,File的length()方法返回的类型为long,long型能表示的正数最大值为:9223372036854775807,折算成最大能支持的文件大小为:8954730132868714 EB字节,这个量级将在人类IT发展史上受用很多很多年,而FileInputStream的avaliable()方法返回值是int,在之前也介绍了最大的表示范围,所能支持的最大文件大小为:1.99GB,而这个量级我们现在很容易就达到了。
三、通过file.nio.*中的FileChannel工具来获取文件大小:
针对流式方法读取大文件大小也不是不可行,只是不能再使用传统的java.io.*下的包了,这里要用到java.nio.*下的新工具——FileChannel。下面我们来看下示例代码:
public static void main(String[] args) {FileChannel fc= null;try {File f= new File("D:\\CentOS-6.5-x86_64-bin-DVD1.iso");if (f.exists() && f.isFile()){FileInputStream fis= new FileInputStream(f);fc= fis.getChannel();logger.info(fc.size());}else{logger.info("file doesn't exist or is not a file");}} catch (FileNotFoundException e) {logger.error(e);} catch (IOException e) {logger.error(e);} finally {if (null!=fc)){try{fc.close();}catch(IOException e){logger.error(e);}} }
}
3、查看结果:
使用FileChannel后得到的结果与第一种情况吻合,准确地描述了文件的准确大小。
简单总结一下,对于2GB以内的文件,使用InputStream的ailable()是可以的,对于2GB以上的就不可以了。其他的File的length()方法和FileChanne对于所有文件都可以获取文件大小。
android 获取文件大小就讲完了。
就这么简单。
android 获取文件大小相关推荐
- Android P90上ftell无法获取文件大小
背景描述: 在P90上,File.createNewFile.File.rename.File.delete等文件目录操作无法操作SDCard文件 也不会报错,只会return false:表示执行结 ...
- android java file 清理垃圾获取文件大小 删除文件等操作
这么久没有写博客了,今天给大家分享一些多file文件的操作.一般可以用到清理垃圾获取文件大小 删除文件等操作,可以直接用于工具类里面,直接做操作便可以 public final class FileU ...
- android 扫描所有文件大小,Android获取指定文件大小
/** * 获取指定文件大小 * @param f * @return * @throws Exception */ public static long getFileSize(File file) ...
- android 获取文件夹的字节数,android java file 清理垃圾获取文件大小 删除文件等操作...
这么久没有写博客了,今天给大家分享一些多file文件的操作.一般可以用到清理垃圾获取文件大小 删除文件等操作,可以直接用于工具类里面,直接做操作便可以 public final class FileU ...
- Android 获取下载链接文件大小
今天写下载文件模块,文件可以下载,但是进度条没显示,经过调试,发现得到的下载文件长度为-1.经查找资料,解决. // 创建连接 HttpURLConnection conn = (HttpURLCon ...
- android获取多媒体库的视频、音频、图片
从媒体库中查找音频.视频.图片文件的相关信息,并获取视频.图片.专辑图片的缩略图 和一些文件操作 package com.uwatch.swconnectservice.util; import ja ...
- php获取远程文件大小转mb,php获取文件大小_php获取文件大小并转换gb,mb,kb代码
摘要 腾兴网为您分享:php获取文件大小并转换gb,mb,kb代码,长沙银行,悦读小说,易码平台,星球联盟等软件知识,以及东方通达信,黑猫影视,theworld浏览器,测距app,创业天下,mount ...
- android 扫描所有图片格式,Android获取本机各种类型文件列表(音乐、视频、图片、文档等)...
介绍 本篇介绍Android获取本机各种类型文件的方法,已经封装成工具类,末尾有源码下载地址. 提示 获取音乐.视频.图片.文档等文件是需要有读取SD卡的权限的,如果是6.0以下的系统,则直接在清单文 ...
- Android获取图片缓存及清除
封装一个类 package com.jianong.xmtt.util;import android.content.Context; import android.os.Environment;im ...
最新文章
- 添加Soap头来增加Web Service的安全性
- R语言ggplot2可视化线图(line plot):当数据有中断、缺失时R不会将数据绘制为连续的线图、而是出现断点
- SAP WM Movement Type 里的‘Ref.Stor.Type Search’字段用法初探
- poj1730Pollard分解
- linux操作系统cp命令
- 更强的压缩比!PostgreSQL开始支持Zstd
- Unable to locate the default servlet for serving static content. Please set the 'defaultServletName'
- jenkins 部署问题
- SpringBoot迭代发布下的Jar瘦身实践
- vue 报错 Error: timeout of 5000ms exceeded
- 共享单车需求预测问题:建模篇
- redis 配置文件配置
- 联机侠控制台JAVA_联机侠控制台常见问题 | 我的世界 | MC世界侠
- Word页眉插入章标题(标题1)
- 解决GD32F105休眠后无法唤醒的问题
- C语言——关于位段的理解
- ENVI:在ENVI中如何查看所打开遥感影像的所有波段
- salmon:sailfish的升级版本
- c语言中的字母占位符,C语言专题-基本数据类和占位符
- 【FPGA】多功能ALU
热门文章
- android mediaplayer 实现歌曲边播放边下载
- hdu2097 Sky数
- 【GXOI/GZOI2019】与或和【单调栈】
- 计算机控制台什么意思,电脑上,控制面板是什么意思
- 喜报 | 炼石入选北京市“专精特新”企业
- Quad Industries、Agfa等公司合作推出塑料12位RFID标签和带有丝印印刷电路的读出
- 今天给自己分享下我的心得体会
- 笔记本计算机涂硅脂,硅脂,小编教你怎么在电脑CPU上涂散热硅脂
- SegmentFault Hackathon 文艺复兴今在沪举行
- 全国计算机停考通知,紧急停考通知!!!