【问题标题】:Get actual disk usage for a file in java在java中获取文件的实际磁盘使用情况
【发布时间】:2015-11-06 06:47:17
【问题描述】:

我正在使用 java.io.File.length() 方法来获取文件的大小。

但对于稀疏文件,此值可能与该文件使用的实际磁盘空间有很大不同。

有没有办法获取文件的实际磁盘使用情况?

文件的外观大小是文件中的字节数。例如,一个包含单词“zoo”但没有换行符的文件当然会显示大小为 3。但是,使用以下命令创建的稀疏文件:

dd bs=1 seek=2GiB if=/dev/null of=big

外观大小为 2 GiB,但在大多数现代系统上,它实际上几乎不使用磁盘空间。

【问题讨论】:

  • 这高度依赖于操作系统,所以如果 Java(我的意思是标准 JDK 库)中有一种方法可以做到这一点,我会感到非常惊讶。无论如何,可能有一个不起眼的第三方库。

标签: java file


【解决方案1】:

使用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;

【讨论】:

  • not work on linux for stat.st_blocks is not implemented in jnr-posix at jnr.posix.util.DefaultPOSIXHandler.unimplementedError(DefaultPOSIXHandler.java:28)
猜你喜欢
  • 2015-10-30
  • 2011-05-15
  • 1970-01-01
  • 1970-01-01
  • 2010-10-07
  • 2023-03-24
  • 2019-05-02
  • 1970-01-01
相关资源
最近更新 更多