在我的应用程序的某些点写入文件后,我希望强制同步到磁盘。由于它在 Linux 上运行,我可以只运行
Runtime.getRuntime().exec("sync");
但是,我宁愿不介绍 Linux 特定的系统调用,而宁愿使用
java.io.FileDescriptor#sync();
但是,我使用 Apache VFS 在本地文件系统上执行操作,据我所知,它不提供对底层文件描述符的访问。但是我是否需要访问刚刚写入以强制同步的实际文件描述符?例如,我不能只使用任何 FileDescriptor 来调用同步以获得相同的效果吗
FileDescriptor.in.sync();
这会是一种有效的方法吗,结果是否与在 Linux 中调用同步的结果相匹配?
以防万一有人知道是否/如何可以访问 VFS 中的底层 FileDescriptor,了解一下也很有用。
编辑:看来
FileDescriptor.in.sync();
不想在 Linux 上工作(尽管从 Eclipse 运行时它可以在我的 Windows 机器上工作),但是
new FileOutputStream(new File("anyfile")).getFD().sync();
绝对有效,调用它的结果与直接调用 Linux 同步命令的结果相匹配。但是,它涉及打开和关闭冗余文件输出流,因此并不完全理想。任何其他原因这可能是一个坏主意,因为它似乎确实有效?是否有其他方法可以获得可用于同步的 FileDescriptor?