2

有没有办法使用标准 Java File API 访问分配给文件的块数?或者甚至使用一些不受支持和未记录的 API 来做这件事。任何可以避免使用本机代码插件的方法。

我说的是struct stat的st_blocks字段,fstat /stat系统调用在 Unix 中工作。

我想要做的是创建一个现在有很多冗余数据的文件的稀疏副本,即制作它的新副本,只包含活动数据但稀疏地写入它。然后用原子重命名/链接操作交换这两个文件。但是我需要一种方法来预先找出文件分配了多少块,它可能已经被稀疏地复制了。然后删除旧文件。

这将用于释放 100% Java 数据库应用程序中的磁盘空间。依赖文件系统中的稀疏文件支持的好处是我不必更改指出数据所在位置的索引,这会增加手头任务的复杂性。

我想我可以通过依赖文件时间戳来查看文件是否已经被清理过。但这让我很感兴趣。我什至在 java 7 NIO.2 API 中找不到任何用于此级别的文件属性访问的内容。

4

1 回答 1

3

我能想到的唯一方法是用来ls -s filename获取磁盘上文件的实际大小。 http://www.lrdev.com/lr/unix/sparsefile.html

于 2011-11-11T14:03:15.347 回答