gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 05:23:00 28 4
gpt4 key购买 nike

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

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

public  void copyDifferentFolderFilesIntoOne(String mergedFolderStr,String ... foldersStr)
{
File mergedFolder= new File(mergedFolderStr);
for(String folder: foldersStr)
{
//copy folder's files into 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/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com