我正在尝试将文件从一个目录传输到另一个目录。我目前正在使用此方法来完成此任务:
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.txt
和main.java
,但我不想复制/更新/替换this.txt
我以为我可以检查文件是否存在类似
的内容 if(f.exists() && !f.isDirectory())
但这看起来有点黑客,并没有按照我的意图实际工作。
我正在寻找一种常见,简单的方法,谢谢。
是否有解决方案也适用于子目录?
答案 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);
}
}
}