今天,简单讲讲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 获取文件大小相关推荐

  1. Android P90上ftell无法获取文件大小

    背景描述: 在P90上,File.createNewFile.File.rename.File.delete等文件目录操作无法操作SDCard文件 也不会报错,只会return false:表示执行结 ...

  2. android java file 清理垃圾获取文件大小 删除文件等操作

    这么久没有写博客了,今天给大家分享一些多file文件的操作.一般可以用到清理垃圾获取文件大小 删除文件等操作,可以直接用于工具类里面,直接做操作便可以 public final class FileU ...

  3. android 扫描所有文件大小,Android获取指定文件大小

    /** * 获取指定文件大小 * @param f * @return * @throws Exception */ public static long getFileSize(File file) ...

  4. android 获取文件夹的字节数,android java file 清理垃圾获取文件大小 删除文件等操作...

    这么久没有写博客了,今天给大家分享一些多file文件的操作.一般可以用到清理垃圾获取文件大小 删除文件等操作,可以直接用于工具类里面,直接做操作便可以 public final class FileU ...

  5. Android 获取下载链接文件大小

    今天写下载文件模块,文件可以下载,但是进度条没显示,经过调试,发现得到的下载文件长度为-1.经查找资料,解决. // 创建连接 HttpURLConnection conn = (HttpURLCon ...

  6. android获取多媒体库的视频、音频、图片

    从媒体库中查找音频.视频.图片文件的相关信息,并获取视频.图片.专辑图片的缩略图 和一些文件操作 package com.uwatch.swconnectservice.util; import ja ...

  7. php获取远程文件大小转mb,php获取文件大小_php获取文件大小并转换gb,mb,kb代码

    摘要 腾兴网为您分享:php获取文件大小并转换gb,mb,kb代码,长沙银行,悦读小说,易码平台,星球联盟等软件知识,以及东方通达信,黑猫影视,theworld浏览器,测距app,创业天下,mount ...

  8. android 扫描所有图片格式,Android获取本机各种类型文件列表(音乐、视频、图片、文档等)...

    介绍 本篇介绍Android获取本机各种类型文件的方法,已经封装成工具类,末尾有源码下载地址. 提示 获取音乐.视频.图片.文档等文件是需要有读取SD卡的权限的,如果是6.0以下的系统,则直接在清单文 ...

  9. Android获取图片缓存及清除

    封装一个类 package com.jianong.xmtt.util;import android.content.Context; import android.os.Environment;im ...

最新文章

  1. 添加Soap头来增加Web Service的安全性
  2. R语言ggplot2可视化线图(line plot):当数据有中断、缺失时R不会将数据绘制为连续的线图、而是出现断点
  3. SAP WM Movement Type 里的‘Ref.Stor.Type Search’字段用法初探
  4. poj1730Pollard分解
  5. linux操作系统cp命令
  6. 更强的压缩比!PostgreSQL开始支持Zstd
  7. Unable to locate the default servlet for serving static content. Please set the 'defaultServletName'
  8. jenkins 部署问题
  9. SpringBoot迭代发布下的Jar瘦身实践
  10. vue 报错 Error: timeout of 5000ms exceeded
  11. 共享单车需求预测问题:建模篇
  12. redis 配置文件配置
  13. 联机侠控制台JAVA_联机侠控制台常见问题 | 我的世界 | MC世界侠
  14. Word页眉插入章标题(标题1)
  15. 解决GD32F105休眠后无法唤醒的问题
  16. C语言——关于位段的理解
  17. ENVI:在ENVI中如何查看所打开遥感影像的所有波段
  18. salmon:sailfish的升级版本
  19. c语言中的字母占位符,C语言专题-基本数据类和占位符
  20. 【FPGA】多功能ALU

热门文章

  1. android mediaplayer 实现歌曲边播放边下载
  2. hdu2097 Sky数
  3. 【GXOI/GZOI2019】与或和【单调栈】
  4. 计算机控制台什么意思,电脑上,控制面板是什么意思
  5. 喜报 | 炼石入选北京市“专精特新”企业
  6. Quad Industries、Agfa等公司合作推出塑料12位RFID标签和带有丝印印刷电路的读出
  7. 今天给自己分享下我的心得体会
  8. 笔记本计算机涂硅脂,硅脂,小编教你怎么在电脑CPU上涂散热硅脂
  9. SegmentFault Hackathon 文艺复兴今在沪举行
  10. 全国计算机停考通知,紧急停考通知!!!