我正在使用java.io.File.length()方法来获取文件的大小。
但是对于稀疏文件,此值可能与该文件使用的实际磁盘空间非常不同。
有没有办法获得文件的实际磁盘使用量?
文件的外观大小是文件中的字节数。例如,包含单词'zoo'而没有换行的文件当然会具有3的表观大小。但是,使用此命令创建的稀疏文件:
dd bs=1 seek=2GiB if=/dev/null of=big
的表观大小为2 GiB,但在大多数现代系统中,它实际上几乎没有磁盘空间。
答案 0 :(得分:2)
使用jnr-posix。用法示例:
import jnr.posix.*;
final POSIX p = POSIXFactory.getPOSIX();
final int S_BLKSIZE = 512; // from sys/stat.h
final FileStat stat = p.stat("/some/file.txt");
final long bytes = stat.blocks() * S_BLKSIZE;