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

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

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

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

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

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

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

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

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

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