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



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

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

加上:这个目录包含数百万个文件,它们都是pdf格式的。我每次只需要一个

您可以将此任务委托给java.io.File类,它有一些方便的方法从目录中返回符合某些标准的文件列表。

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

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

directoryFile对象

有各种方便的方法/库可以帮助您完成此操作,如其他答案所述。然而,在某种程度上它们都需要读取所有目录条目,并将名称与您的模式进行比较。

为什么?

因为那是一个典型的操作系统提供的API来做这类事情。如果要检查数以百万计的文件名,这将不可避免地很慢。


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

实现java.io.FilenameFilter检查正确的扩展(String.endsWith())和其他目标字符串(String.indexOf())的存在,然后将其传递给File.listFiles(FilenameFilter)。本例中的File,指向感兴趣的目录。

如果您需要递归搜索,Apache Commons-IO FileUtils可以很好地完成listFiles(文件目录,IOFileFilter fileFilter, IOFileFilter dirFilter)

共享文件。io为递归搜索提供直接API ..

FileUtils。

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将包含从给定目录到递归深度递归搜索的所有文件集合。

相关内容

  • 没有找到相关文章