2

私が持っている約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;
    }    
}
4

0 に答える 0