私が持っている約15のフォルダがあります。すべてのフォルダーには、同様のサブ構造があります。フォルダーの内容をマージする必要がありました。1.一度に2つのフォルダーを取得する2.一度に3つのフォルダーを取得する同じ名前の両方のファイルが保存されるようにします。
例:
folder 1
---pqr
------abc.txt
------xyz.txt
folder 2
---pqr
------abc.txt
マージ後:
folder 3
---pqr
-------abc.txt
-------abc.txt(2)
-------xyz.txt
Javaコードで私を助けてください。前もって感謝します。
これは、これまでネットビーンズで行ってきたことです。
package merger;
import org.apache.commons.io.FileUtils;
import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
public class Merger {
public static void main(String[] args)
{
}
public void copyDifferentFolderFilesIntoOne(String mergedFolderStr,
String... foldersStr) throws IOException
{
final File mergedFolder = new File(mergedFolderStr);
final Map<String, File> filesMap = new HashMap<> ();
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;
}
}