17

我有一些用 Java 6 编写的文件 I/0 遍历代码,试图将其移动到 Java 7 中的新 I/O,但我找不到任何替代这种东西的方法。

File[] files = dir.listFiles(AudioFileFilter.getInstance());

也就是说,没有办法只过滤文​​件的路径,它返回文件列表,所以如果我想限制在它调用的方法中使用 File,我必须将每个文件转换为路径(file.toPath),这似乎相当费力.

我确实看过 FileVisitor 但这似乎不允许您控制树的遍历方式,所以我认为它对我有用。

那么 Java 7 中的 Path for File 有多少替代品呢?

4

1 回答 1

25

使用Files#newDirectoryStreamDirectoryStream.Filter

这是代码:

DirectoryStream<Path> stream = Files.newDirectoryStream(dir, new DirectoryStream.Filter<Path>() {

        @Override
        public boolean accept(Path entry) throws IOException 
        {
            return Files.isDirectory(entry);
        }
    });

for (Path entry: stream) {
      ...
}

顺便说一句,为简单起见,我省略了上述代码中的异常处理。

于 2013-02-15T11:08:50.900 回答