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

2022-09-03 01:14:13

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

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

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

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

那么Java 7中的文件路径有多少替换?


答案 1

使用文件#new目录流目录流.过滤器

代码如下:

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

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


答案 2