替换忽略重复文件的整个目录

时间:2015-12-18 19:16:48

标签: java file directory fileutils

我正在尝试将文件从一个目录传输到另一个目录。我目前正在使用此方法来完成此任务:

File srcDir = new File("path\to\file");
File destDIr = new File("path\to\file");
File.Utils.copyDirectory(srcDir, destDir);

但我想要的是不要用srcDir中的文件覆盖destDir中已经存在的文件。

例如,如果我有一个文件结构,如:

├───srcDir
│   ├───this.txt
│   ├───hello.txt
│   ├───main.java

├───destDir
│   ├───this.txt

我想复制hello.txtmain.java,但我不想复制/更新/替换this.txt

我以为我可以检查文件是否存在类似

的内容

if(f.exists() && !f.isDirectory())

但这看起来有点黑客,并没有按照我的意图实际工作。

我正在寻找一种常见,简单的方法,谢谢。

是否有解决方案也适用于子目录?

1 个答案:

答案 0 :(得分:-1)

您可以尝试使用此代码。它对我有用。

public class CopyDirectoryWithoutOverWritting 
{
    public static void main(String[] args)
    {   
        File srcFolder = new File("C:/Users/Usuarioç/Desktop/FACHA");
    File destFolder = new File("C:/Users/Usuarioç/Desktop/OTRO");
    //make sure source exists
    if(!srcFolder.exists()){

       System.out.println("Directory does not exist.");
       //just exit
       System.exit(0);

    }else{

       try{
        copyFolder(srcFolder,destFolder);
       }catch(IOException e){
        e.printStackTrace();
        //error, just exit
         System.exit(0);
       }
    }

    System.out.println("Done");
}

public static void copyFolder(File src, File dest)
    throws IOException{

    if(src.isDirectory()){

        //if directory not exists, create it
        if(!dest.exists()){
           dest.mkdir();
           System.out.println("Directory copied from " 
                          + src + "  to " + dest);
        }

        //list all the directory contents
        String files[] = src.list();

        for (String file : files) {
           //construct the src and dest file structure
           File srcFile = new File(src, file);
           File destFile = new File(dest, file);
           if(!destFile.isDirectory() && !destFile.exists()){
               //recursive copy
               copyFolder(srcFile,destFile);
           }
        }

    }else{
        //if file, then copy it
        //Use bytes stream to support all file types
        InputStream in = new FileInputStream(src);
            OutputStream out = new FileOutputStream(dest); 

            byte[] buffer = new byte[1024];

            int length;
            //copy the file content in bytes 
            while ((length = in.read(buffer)) > 0){
               out.write(buffer, 0, length);
            }

            in.close();
            out.close();
            System.out.println("File copied from " + src + " to " + dest);
    }
}
}