2011-11-11 31 views
2

有没有办法通过标准Java File API访问分配给文件的块数?甚至可以用一些不支持的未公开的API来做到这一点。任何要避免本地代码插件。分配给稀疏文件的块数

我谈论的的st_blocks 结构统计领域的FSTAT/STAT系统调用在Unix系统。

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

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

我想我可以通过依靠文件时间戳来查看文件是否已被清理。但是这让我很感兴趣。在这个级别上,我甚至无法在java 7 NIO.2 API中找到文件属性访问的任何内容。

+0

这听起来像是冰山一角。如何使用标准Java API编写稀疏文件?可移植性如何? - 你的应用程序是否可以在没有此功能的平台上运行?当稀疏文件被扩展时,你准备好处理突然缺少的磁盘空间吗? –

+0

Java文件NIO有一些“FileAttributeViews”,它将非常适合这个。然而,我不认为任何这些标准属性列出“块分配”或“实际磁盘使用情况”(无论枚举键Javadoc nur)。 http://docs.oracle.com/javase/7/docs/api/java/nio/file/attribute/FileAttributeView.html – eckes

回答