如何在目录中搜索带有re的文件?

时间:2011-04-21 06:48:07

标签: java regex file find

我想在目录中搜索文件。文件名包含一些字符串,如00012345,而完整名称应为XXXXXX_00012345_XXXXXX.PDF。

我是否需要遍历目录以查找所有文件的文件名以比较其名称?我的目录有很多文件,我不想这样做。

加: 该目录包含数百万个文件,所有文件都是pdf。 我每次只需要一个。

5 个答案:

答案 0 :(得分:2)

您可以将此作业委托给java.io.File类,它有一些方便的方法来返回符合某些条件的目录中的文件列表。

在你的情况下,我会实现一个FilenameFilter,测试,如果文件名符合你的标准并使用这个方法:

File[] files = directory.listFiles(new FileNameFilter() {
   @Override
   public boolean accept(File dir, String name) {
      return nameMatchesCriteria();  // to be implemented...
   }
});

directory作为File对象。

答案 1 :(得分:1)

实施java.io.FilenameFilter对正确扩展名(String.endsWith())的检查以及其他目标字符串(String.indexOf())的存在,然后将其传递给File.listFiles(FilenameFilter)。在这种情况下,File指向感兴趣的目录。

答案 2 :(得分:1)

如其他答案中所述,有各种便利方法/库可帮助您完成此操作。但是在某个级别它们都需要读取所有目录条目,并将名称与您的模式进行比较。

为什么?

因为这是典型操作系统提供用于执行此类操作的API。如果要检查数百万个文件名,这将不可避免地变慢。


如果您想快速完成此类操作,则需要重新设计系统,以便为文件空间提供一些(目录)结构,以便导航到所需的文件而不是搜索。我不知道这对你的申请是否可行。

答案 3 :(得分:0)

如果您需要递归搜索,Apache Commons-IO FileUtils可以很好地处理listFiles(File directory, IOFileFilter fileFilter, IOFileFilter dirFilter)

答案 4 :(得分:0)

commons.io的FileUtils为递归搜索提供了直接的API ..

FileUtils.listFiles(,,);

例如

String extensions = {"pdf", "xml"};
bool recursiveSearch = true;
File dir = new File("<path of directory to be searched>");
Collection searchResult = FileUtils.listFiles(dir , extensions, recursiveSearch );

searchResult将包含从给定目录递归搜索到其递归深度的所有文件集合。