Java中的文本文件处理:执行哪个更符合逻辑?

Java中的文本文件处理:执行哪个更符合逻辑?,java,file-io,Java,File Io,我必须从总共180万个文件中搜索和复制文件。 以下是我必须做的: 我在一个数组中有40个文件名,在一个文件夹中有18000000个文件 什么是好的执行选项 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万个文件中搜索和复制文件。 以下是我必须做的:

我在一个数组中有40个文件名,在一个文件夹中有18000000个文件

什么是好的执行选项

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万个文件中匹配

请告诉我原因。

我的建议:

1) 拆分文件夹中的文件。大多数文件系统不喜欢在一个文件夹中保存这么多内容

2) 你不能把你的数据放进数据库吗?即使不是结构化的-至少是斑点

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

但最好是:

一次浏览所有文件,将它们的CRC32散列放入映射中,然后对照列表中的40个文件进行检查。换句话说,建立元数据,在此基础上比较“拷贝文件”(我猜你指的是精确的拷贝),并通过这些元数据在地图中查找

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

使用FileNameFilter

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

我想你有

  • 目录结构,共有180万个文件
  • 具有 40串
  • 现在的任务是从40个数组中找到名称包含且可能不完全匹配任何字符串的文件,然后对其进行处理


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

    您尝试过这两种方法吗?你试过什么吗?您对这两种选择的具体关注点是什么?不幸的是,我们不是来为你工作的。我们将帮助您解决在尝试解决问题时遇到的特定问题。您的阵列或文件夹中是否有180万个文件?什么是1800万?什么是阵列?如果文件不太长,最好将其加载到内存中。@Jesse Webb我只是想知道什么更有效,选择“a”或“b”…让你的问题更清楚会让你得到很好的答案这些文件已经分为数千个文件夹。你说一个文件夹中有1800000个文件。你似乎无法控制你说的话。对不起,我的英语不好。