在Java 7中调整默认文件系统的行为

时间:2013-10-17 11:45:22

标签: java io filesystems java-7

Java 7为编写自定义文件系统引入了一个很棒的API。考虑一个我不想实现新文件系统的用例,我只想调整现有文件系统的行为。例如,翻转从其写入/读取的每一位。

在我看来,目前的jdk没有适当的设施。 AbstractFileSystemProvider,WindowsFileSystemProvider扩展的提供程序是包私有的,因此我无法重用它。我甚至没有找到Linux的具体实现。

问题#1:当前文件系统没有用于扩展的有用抽象。

我们假设我只针对Windows进行扩展。 WindowsFileSystemProvider是公共的,所以我实际上可以轻松地覆盖newByteChannel并完成它。但是唉!

问题2:WindowsFileSystem 公开,所以我实际上只需要编写一个全新的FileSystem来引入一个新的Provider。

我是否遗漏了某些内容,或者此功能是否完全原始且尚未准备好供应用程序编写者使用?

1 个答案:

答案 0 :(得分:2)

在openjdk中联系core-libs-dev之后,我得到了以下答案:

  

服务提供程序接口允许您替换默认提供程序或插入它(有关如何配置的详细信息,请参阅FileSystems.getDefault文档)。当您在默认提供程序上设置时,您就有机会进行自定义,尽管确保您获得所有委派权限可能很棘手。作为起点,然后查看jdk / test树中的PassThroughFileSystem,这是一些测试使用的提供程序,可能就是您要查找的内容。

PassThroughFileSystem是一个很好的参考实现,演示了如何实现自定义提供程序以及对默认提供程序的正确委派。话虽如此,在我看来问题仍然存在,但至少我们有一个更好的起点。