Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在java中合并2个文件夹,通过更改其名称保留公共文件_Java_File_File Io_Io_Merge - Fatal编程技术网

在java中合并2个文件夹,通过更改其名称保留公共文件

在java中合并2个文件夹,通过更改其名称保留公共文件,java,file,file-io,io,merge,Java,File,File Io,Io,Merge,我有大约15个文件夹。每个文件夹都有类似的子结构。我要合并文件夹的内容: 1.一次使用两个文件夹 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代码。提前谢谢 这就是我到目前为

我有大约15个文件夹。每个文件夹都有类似的子结构。我要合并文件夹的内容: 1.一次使用两个文件夹 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代码。提前谢谢

这就是我到目前为止在netbeans中所做的

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;
    }    
}
一揽子合并;
导入org.apache.commons.io.FileUtils;
导入java.io.File;
导入java.io.IOException;
导入java.util.HashMap;
导入java.util.Map;
公共类合并{
公共静态void main(字符串[]args)
{
}
public void copyDifferentFolderFilesToone(字符串mergedFolderStr,
字符串…foldersStr)引发IOException
{
最终文件mergedFolder=新文件(mergedFolderStr);
final-Map filesMap=newhashmap();
用于(字符串文件夹:foldersStr){
UpdateFileMap(新文件(文件夹),FileMap,null);
}
对于(最终映射.Entry文件项:filemap.entrySet()){
最后一个字符串relativeName=fileEntry.getKey();
最终文件srcFile=fileEntry.getValue();
FileUtils.copyFile(srcFile,新文件(mergedFolder,relativeName));
}
}
私有void updateFileMap(最终文件baseFolder、最终映射fileMap、,
最终字符串(名称)
{
对于(最终文件:baseFolder.listFiles()){
最后一个字符串fileRelativeName=getFileRelativeName(relativeName,file.getName());
if(file.isDirectory())
{           
UpdateFileMap(文件、文件映射、文件相对名);
}
否则{
最终文件existingFile=filesMap.get(fileRelativeName);
如果(existingFile==null | | file.lastModified()>existingFile.lastModified()){
filesMap.put(fileRelativeName,file);
}
}
}
}
私有字符串getFileRelativeName(最终字符串baseName,最终字符串文件名)
{
返回baseName==null?文件名:baseName+“/”+文件名;
}    
}