我正在尝试实例化一个File变量,但只知道部分文件名。即我知道文件名以“pass_231_”开头,但不知道其余的。这甚至可能吗?
答案 0 :(得分:3)
如果您知道它所在的目录,是的。您可以使用FileFilter
:
final String prefix = "pass_231_"
File dir = ... ;
File[] candidates = dir.listFiles(new FileFilter() {
@Override
public boolean accept(File pathname) {
return pathname.getName().startsWith(prefix);
}
});
// candidates will contain all files starting with "pass_231_"
如果需要递归搜索(包括子文件夹),可以执行以下操作:
String prefix = "pass_231_";
File dir = ... ;
List<File> candidates = new ArrayList<File>();
searchRecursively(dir, prefix, candidates);
// candidates will contain all files starting with "pass_231_"
然后searchRecursively
看起来像这样:
public static void searchRecursively(File dir, final String prefix, List<File> candidates) {
File[] matches = dir.listFiles(new FileFilter() {
@Override
public boolean accept(File pathname) {
return pathname.getName().startsWith(prefix);
}
});
candidates.addAll(Arrays.asList(matches));
File[] subdirs = dir.listFiles(new FileFilter() {
@Override
public boolean accept(File pathname) {
return pathname.isDirectory();
}
});
for (File subdir : subdirs) {
searchRecursively(subdir, prefix, candidates);
}
}
答案 1 :(得分:1)
尝试在包含该文件的目录上使用File.listFiles(filter)
方法。更多信息here。
答案 2 :(得分:0)
您可以列出文件夹中的所有文件,然后,一旦知道全名,就打开该文件。
请参阅File.list()方法。
答案 3 :(得分:0)
您必须对文件夹执行过滤,但如果过滤器返回多个文件,则必须确定要打开哪个文件。
答案 4 :(得分:0)
如果有人像我刚才一样试图找到“如何用他的名字的一部分打开文件”,那么
List<String> list = Files.walk(path)
.map((q) -> q.getFileName().toString())
.filter((s) -> s.contains("2019-05-25"))
.collect(Collectors.toList());
if(list.size() == 1){
System.out.println("your file is" + list.get(0));
} else {
System.out.println("there are more than one file");
}