GEP-6


元数据
编号

GEP-6

标题

Groovy 的 NIO2 支持

版本

2

类型

功能

状态

最终

评论

在 Groovy 2.3 中交付

负责人

Merlyn Albery-Speyer/Hamlet D'Arcy

创建

2010-09-25

最后修改 

2018-10-12

摘要

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)

许多细微的调整