使用通配符列出Java 7 nio中的目录列表

17

我想使用通配符在一个目录中查找文件。我已经用Java 6实现了这个功能,但希望将代码转换为Java 7 NIO:

 File dir = new File(mydir); 
 FileFilter fileFilter = new WildcardFileFilter(identifier+".*");
 File[] files = dir.listFiles(fileFilter);

没有WildcardFileFilter,我已经试过一些通配符。


1
你读过查找文件吗? - Andy Turner
请查看http://stackoverflow.com/questions/20443793/allow-wildcards-to-search-for-subdirectories-from-a-parent-directory。它应该能帮助您构建正确的代码。 - wsl
3个回答

16

你可以将通配符传递给DirectoryStream

import java.nio.file.DirectoryStream;
import java.nio.file.FileSystems;
import java.nio.file.Files;
import java.nio.file.Path;
...

Path dir = FileSystems.getDefault().getPath( filePath );
DirectoryStream<Path> stream = Files.newDirectoryStream( dir, "*.{txt,doc,pdf,ppt}" );
for (Path path : stream) {
    System.out.println( path.getFileName() );
}
stream.close();

1
我认为你需要一个强制转换,对吧?for (Path path : (Path) stream) { - Jabda
2
@Jabda,你是对的。这个问题已经修复了(添加了DIrectoryStream<Path>)。 - RealHowTo

7
你可以使用 目录流通配符 来实现:
DirectoryStream<Path> stream = Files.newDirectoryStream(dir, identifier+".*")

然后迭代文件路径:
for (Path entry: stream) {
}

0

这个问题是针对Java 7的,但它也成为了一般情况下这个问题的第一个结果。使用Java 8及更高版本,通过NIO进行此操作的方式是使用Files.findBiPredicate<T, U>

Stream<Path> stream = Files.find(
        Paths.get("/dirToSearch"),
        1, // Search depth of 1 in our case, set to >1 or -1 to explore subfolders
        (path, basicFileAttributes) -> {
            String filename = path.getFileName().toString();
            return filename.startsWith("identifier");
        }
);
// The stream is lazily populated
Path firstMatch = stream.findFirst().get();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接