GEP-6
摘要
JDK 7 包含一个新的 java.nio.file 包和 Path 类。这些提供了对文件系统任务的扩展功能。我们应该探索将其整合到 Groovy 中。
方法
我建议
-
创建一个 OpenJDK 7 版本的 Groovy
-
暂时将 NIO2 支持移到 Groovy 模块中
-
当 JDK 7 正式发布时,将 NIO2 Groovy 模块移到 Groovy-core 中
JDK 7 仍处于测试版。它可能会发生变化。如果我们今天将 NIO2 支持构建到 Groovy 中并发布,那么我们就有可能出现 JDK 7 进行 API 更改,这将迫使我们支持两种不同的 API。那将是不好的。
Groovy NIO 模块中的待办事项
-
支持新的 Path 对象
-
所有 GDK File API 都需要在 Path 上
-
NIO2 包含一个新的 WatchService API。我们可能需要在 WatchService 上提供一个 GDK,以便使用闭包等轻松地使用它。我认为这是最有趣的任务。
Groovy Core 中的待办事项
Groovy 有一个 FileNameFinder 和 FileNameRegExFinder。这些东西也需要与 Paths 协同工作:http://mrhaki.blogspot.com/2009/11/groovy-goodness-finding-files-with.html
我还没有查看过这个列表中的每个文件,但我们需要分析这些 Groovy 源文件,看看是否需要任何并行的 Path 实现。前三个文件看起来是最重要的
./groovy/util/IFileNameFinder.java
./groovy/io/FileType.java
./groovy/io/FileVisitResult.java
./org/codehaus/groovy/runtime/WritableFile.java
./org/codehaus/groovy/ant/FileIterator.java
./org/codehaus/groovy/ant/FileScanner.java
./org/codehaus/groovy/control/io/FileReaderSource.java
我在 Groovy-core 中没有找到任何实例,但任何 asType(File)
方法都需要一个并行的 asType(Path)
- 我相信 asWritable(Path)
是唯一需要的更改。在 NIO2 中,我相信 File.list
和另一个方法现在返回一个迭代器,这使得该方法能够更好地在网络上工作。我们需要更新 File GDK 以默认使用这种方法,以同样支持网络目录或 ls 样式的列表。NIO2 有一个新的 FileVisitor
类。我们需要将这个新的 FileVisitor
JDK 方法与 Groovy 在 GDK 中使用 .eachFile
方法所做的操作统一起来。以及 .eachFileXXX
方法和 .eachDirXXX
方法,在查找潜在的统一位置时,我们应该包含 .traverse
方法。.traverse
方法的主要作用是在 JDK 7 之前的世界中提供一些类似 FileVisitor
的功能,但由于 NIO2 在那里,可能会有更多可能性。在使用 Map 解决方案之前,还考虑过使用更静态类型化的风格添加额外重载的 traverse 方法。我想现在是看看这个选项的好时机。
参考资料和有用链接
更新历史
- 1 (2010-02-16)
-
从 Codehaus wiki 中提取的版本
- 2 (2018-10-14)
-
许多细微的调整