java - 分配给稀疏文件的 block 数

标签 java filesystems file-attributes

是否有任何方法可以使用标准 Java 文件 API 访问分配给文件的 block 数?或者甚至使用一些不受支持且未记录的 API 来实现。任何可以避免 native 代码插件的事情。

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

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

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

我认为我可以通过依赖文件时间戳来查看文件是否已被清理,从而做得很好。但这引起了我的兴趣。我什至在 java 7 NIO.2 API 中找不到任何用于此级别文件属性访问的内容。

最佳答案

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

关于java - 分配给稀疏文件的 block 数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8094914/

相关文章:

java - java中的时间戳 validator

c - 让群发邮件应用程序准确跟踪其进度的非常有效的方法是什么?

python - 将文件属性保留在副本上

c - 系统调用 open() 似乎在创建文件时随机设置文件权限

c - 如何更改Linux文件属性

windows - 如何在 Python/Go/C/Batch 中获取 Windows 中的扩展文件属性?

java - jQuery - 在页面加载时单击复选框时使 Div 可见(如果已选中)

java - 使用多个 modelAttributes 从 JSP 接收 2 个对象

java - 有没有办法将 spring boot maven pom 项目转换为 gradle?

android - 如何在android中转储文件系统/dev/fuse?