【发布时间】:2013-10-17 11:45:22
【问题描述】:
Java 7 为编写自定义文件系统引入了一个很棒的 API。考虑一个我不想实现新文件系统的用例,我只想调整现有文件系统的行为。例如,翻转它写入/读取的每一位。
在我看来,当前的 jdk 只是没有为此提供适当的设施。 AbstractFileSystemProvider,WindowsFileSystemProvider 扩展的提供程序是包私有的,所以我不能重用它。我什至没有找到 Linux 的具体实现。
问题 #1:当前文件系统没有用于扩展的有用抽象。
假设我只为 Windows 扩展。 WindowsFileSystemProvider 是公共的,所以我实际上可以轻松地覆盖 newByteChannel 并完成它。但是唉!
问题 #2:WindowsFileSystem 不是公开的,所以我实际上必须编写一个全新的 FileSystem 来引入一个新的 Provider。
是我遗漏了什么,还是这个功能完全是原始的,还没有准备好被应用程序编写者使用?
【问题讨论】:
-
对于 1. 可以实现将所有内容简单地委托给现有系统的提供者(不幸的是,这会导致大量样板代码)。如果您希望 only 在 Windows 上具有特殊行为,它会变得很棘手,并且可能需要使用反射(这将是一种脆弱的方法,因为它可能是包私有的原因)。
-
@kiheru 正是我的意思。似乎这个特性已经存在,但是 JDK 的作者并没有付出足够的努力来真正使它易于使用。此外,他们为此发布的教程是个笑话。确实,我避免使用反射来破解东西。
标签: java io filesystems java-7