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

Pau*_*lor 16 java file path java-7 nio2

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

File[] files = dir.listFiles(AudioFileFilter.getInstance());
Run Code Online (Sandbox Code Playgroud)

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

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

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

Sta*_*kER 24

使用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) {
      ...
}
Run Code Online (Sandbox Code Playgroud)

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