我想使用通配符在一个目录中查找文件。我已经用Java 6实现了这个功能,但希望将代码转换为Java 7 NIO:
File dir = new File(mydir);
FileFilter fileFilter = new WildcardFileFilter(identifier+".*");
File[] files = dir.listFiles(fileFilter);
没有WildcardFileFilter
,我已经试过一些通配符。
我想使用通配符在一个目录中查找文件。我已经用Java 6实现了这个功能,但希望将代码转换为Java 7 NIO:
File dir = new File(mydir);
FileFilter fileFilter = new WildcardFileFilter(identifier+".*");
File[] files = dir.listFiles(fileFilter);
没有WildcardFileFilter
,我已经试过一些通配符。
你可以将通配符传递给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();
这个问题是针对Java 7的,但它也成为了一般情况下这个问题的第一个结果。使用Java 8及更高版本,通过NIO进行此操作的方式是使用Files.find
和BiPredicate<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();