如何在Java 7中用nio替换File.listFiles(FileFilter filter)?


问题内容

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

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

也就是说,没有办法只过滤路径文件,并且它返回文件列表,因此如果我想限制在其调用的方法中使用File,那么我将不得不将每个文件转换为path(file.toPath)。

我确实看过FileVisitor,但这似乎不允许您控制如何遍历树,因此我认为它不会对我有用。

那么Java 7中的File for Path可以替代多少呢?


问题答案:

使用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) {
      ...
}

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