簡體   English   中英

如何在Java中將兩個文件夾文件合並為一個

[英]How to merge two Folder files into one in Java

我正在嘗試創建一個簡單的函數,它將兩個或多個文件夾文件復制或合並到一個文件夾中。

我從下面開始。 我想在這里發布以獲得更好質量的代碼。

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> 然后,您可以復制地圖中的文件。

示例代碼(尚未嘗試)可能如下所示:

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中復制文件的標准簡潔方法?

要獲取時間戳,請參閱File.lastModified()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM