5

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

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

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

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

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

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

4

1 回答 1

3

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

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

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

于 2013-10-21T19:55:34.373 回答