章
目
录
学习使用Java的IO类File,Files和Common IO的FileUtils类来获取文件或目录的大小。
1.使用标准IO的File.length()
为了获取文件的大小,File类提供了length()方法,它返回文件以字节为单位的长度。
如果读取文件的访问被拒绝,我们可能会得到SecurityException。
如果该文件代表一个目录,则返回值是不确定的。
File file = new File("c:/temp/demo.txt");
long bytes = file.length();
2. 使用New IO的Files.size()
Files类提供了一个直接的方法size(),它的行为类似于前面的示例。它也返回文件的大小(以字节为单位)。
由于压缩、支持稀疏文件或其他原因,该大小可能与文件系统上的实际大小不同。
此方法如果读取文件的访问被拒绝,也可能会抛出SecurityException。
File file = new File("c:/temp/demo.txt");
long bytes = Files.size(file.toPath());
3. 使用Common IO的FileUtils.sizeOf()
FileUtils.sizeOf()可以用来获取文件或目录的大小。
如果该文件是一个常规文件,那么文件的大小(以字节为单位)将被返回。
如果该文件是一个目录,那么目录的大小将被递归计算。需要注意的是,如果读取任何文件或子目录时出现问题,其大小将不会包含在结果中。
我们应该小心检查目录是否太大,因为sizeOf()不会检测最终大小值溢出并且可能会返回一个负值。
File file = new File("c:/temp/demo.txt");
long bytes = FileUtils.sizeOf(file);
4. 以格式化的方式显示大小
为了以格式化的方式向最终用户显示大小,我们可以自己进行格式化或者使用FileUtils.byteCountToDisplaySize()方法。
4.1 自定义格式化
使用String.format()方法根据需要生成格式化的输出字符串。
System.out.println(String.format("%,d Bytes", bytes));
System.out.println(String.format("%,d KB", bytes / 1024));
4.2. 使用FileUtils.byteCountToDisplaySize()
byteCountToDisplaySize()返回文件的可读版本的大小。请注意,文件大小四舍五入到最近的KB、MB或GB。
System.out.println(FileUtils.byteCountToDisplaySize(2333444l)); //2 MB
System.out.println(FileUtils.byteCountToDisplaySize(2333444555l)); //2 GB
5.结论
在这篇简短教程中,我们学会了如何计算Java中文件或目录的大小。我们还看到了如何格式化文件大小以向用户显示。
对于常规文件,我们可以使用Java IO类。对于计算目录的大小,使用Commons IO的FileUtils是一个很好的选择。