2

我正在尝试实例化一个 File 变量,但只知道文件名的一部分。即我知道文件名以“pass_231_”开头,但不知道其余的。这甚至可能吗?

4

5 回答 5

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);
    }
}
于 2012-10-15T17:53:08.043 回答
1

尝试File.listFiles(filter)在包含该文件的目录上使用该方法。更多信息在这里

于 2012-10-15T17:52:03.600 回答
1

万一有人试图找到“如何按他的名字的一部分打开文件”,就像我刚才一样。

    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");
    }
于 2019-05-25T11:29:34.060 回答
0

您可以列出文件夹中的所有文件,然后在知道全名后打开文件。

请参阅File.list()方法。

于 2012-10-15T17:51:58.940 回答
0

您必须对文件夹进行过滤,但如果过滤器返回多个文件,您必须决定打开哪个文件。

于 2012-10-15T17:52:24.363 回答