-1

我必须从总共 180 万个文件中搜索和复制文件。这是我必须做的:

我在一个数组中有 40 个文件名,在一个文件夹中有 18,00,000 个文件。

什么是执行的好选择?

a) pick one file from folder (having 1.8 millions), and loop through 40 files. 

OR

b) pick one filename from array and loop through 1.8 million files.

我必须搜索并复制那些包含要在这 180 万个文件中匹配的文件名(存在于数组中)的文件。

请指导我,有理由。

4

3 回答 3

0

我的建议:

1)拆分文件夹中的文件。大多数文件系统不太喜欢在一个文件夹中。

2)你不能把你的数据放入数据库吗?即使没有结构化 - 至少 blobs ......

3) 您的选项 1) 似乎可以保证更好的性能,因为遍历 dir 结构比比较字符串更昂贵(这是一个系统调用)。

但更好的是:

一次浏览所有文件,将它们的CRC32 哈希放入 Map,然后检查列表中的 40 个文件。换句话说,根据您比较“复制文件”(我猜您的意思是精确副本)构建元数据并通过这些元数据在地图中查找..

我希望我能很好地理解这个问题。

于 2013-07-11T17:17:07.533 回答
0

使用文件名过滤器

    File directory = new File(path);
    File[] toCopy = directory.listFiles(new FilenameFilter() {
        public boolean accept(File directory, String fileName) {
        //Make a trie or a hash of fileNames mapping to the required files
        boolean success = isRequired(fileName, directory);
            return success;
        }
    });
于 2013-07-11T17:32:46.707 回答
0

我假设你有

  1. 共有 180 万个文件的目录结构。
  2. 一个包含 40 个字符串的数组。

现在的任务是从您的 40 数组中查找名称包含且可能不完全匹配任何字符串的文件,然后处理它们。

我建议,在你的 180 万文件名列表上建立一个搜索索引,然后查询 40 次。您可以为此使用Apache Lucene,但即使是简单的数据库也足够了。

于 2013-07-11T17:48:50.030 回答