java - Java中如何将两个文件夹文件合并为一个

标签 java file file-io

我正在尝试创建一个简单的函数,将两个或多个文件夹文件复制或合并到一个文件夹中。

我从下面开始。我想在这里发帖以获得更好质量的代码。

public  void copyDifferentFolderFilesIntoOne(String mergedFolderStr,String ... foldersStr)
{
  File mergedFolder= new File(mergedFolderStr);
  for(String folder: foldersStr)
  {
    //copy folder's files into mergedFolder
  }
}

当文件复制发生冲突时(即两个或多个文件夹中存在同名文件),我希望将具有最新时间戳的文件复制到 mergedFolder 中。

您知道将两个或多个文件夹文件合并为一个的最佳方法吗?

如果问题不清楚,请告诉我。

最佳答案

您可以创建 Map<String, File>通过遍历合并的目录并保留最新的文件来复制要复制的文件。然后您可以复制 map 中的文件。

示例代码(尚未尝试)可能如下所示:

public void copyDifferentFolderFilesIntoOne(String mergedFolderStr,
        String... foldersStr) {
    final File mergedFolder = new File(mergedFolderStr);
    final Map<String, File> filesMap = new HashMap<String, File> ();
    for (String folder : foldersStr) {
        updateFilesMap(new File (folder), filesMap, null);
    }

    for (final Map.Entry<String, File> fileEntry : filesMap.entrySet()) {
        final String relativeName = fileEntry.getKey();
        final File srcFile = fileEntry.getValue();
        FileUtils.copyFile (srcFile, new File (mergedFolder, relativeName));
    }
}

private void updateFilesMap(final File baseFolder, final Map<String, File> filesMap,
        final String relativeName) {
    for (final File file : baseFolder.listFiles()) {
        final String fileRelativeName = getFileRelativeName (relativeName, file.getName());

        if (file.isDirectory()) {           
            updateFilesMap(file, filesMap, fileRelativeName);
        }
        else {
            final File existingFile = filesMap.get (fileRelativeName);
            if (existingFile == null || file.lastModified() > existingFile.lastModified() ) {
                filesMap.put (fileRelativeName, file);
            }
        }
    }
}

private String getFileRelativeName(final String baseName, final String fileName) {
    return baseName == null ? fileName : baseName + "/" + fileName;
}

关于java - Java中如何将两个文件夹文件合并为一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13502849/

相关文章:

java - 最小化 Controller 责任

java - 嵌套的ArrayList初始化有问题吗?

c# - 在 C# 中打开一个文件并替换字符串

c++ - `fopen` 和 QT(MinGW) 错误

c++ - 关于 C++ 中数组输出到文件的限制

java - 插入组件后使 JScrollPane 滚动到底部的正确方法是什么?

java - 在 Apache commons CLI 中有条件地需要一个选项

PHP 表单不上传文件

javascript - 从 javascript 将内容添加到 .txt 文件

c - 读取 READ FILE (txt) 时出错