2012-10-15 117 views
1

我想实例化一个File变量,但只知道文件名的一部分。即我知道文件名以“pass_231_”开头,但不知道其余部分。这甚至有可能吗?如何访问仅包含部分文件名的文件?

+0

使用的文件.listfiles,并比较所有文件名是否以'pass_231_'开头,并标识要使用的文件。 – Amareswar

+0

最糟糕的情况是您扫描整个目录结构,查找具有匹配名称的文件。所以是的,这是可能的,但它有助于知道它所在的目录。 – NullUserException

回答

0

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

查看File.list()方法。

1

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

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); 
    } 
} 
+0

这正是我所需要的。谢谢! –

相关问题