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

Vit*_*liy 5 java filesystems io java-7

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

在我看来,当前的 jdk 没有为此提供适当的设施。AbstractFileSystemProvider,WindowsFileSystemProvider 扩展的提供程序是包私有的,所以我不能重用它。我什至没有找到 Linux 的具体实现。

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

假设我只为 Windows 扩展。WindowsFileSystemProvider 是公开的,所以我实际上可以轻松地覆盖 newByteChannel 并完成它。可惜!

问题#2:WindowsFileSystem不是公开的,所以我实际上必须编写一个全新的 FileSystem 来引入一个新的 Provider。

我是不是遗漏了什么,或者这个功能是完全原始的,还没有准备好供应用程序编写者使用?

Vit*_*liy 3

联系openjdk中的core-libs-dev后,得到以下答案:

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

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