我想将文件从源目录复制到目标。如果文件已存在于目标目录中,则使用其时间戳附加要复制的新文件,以便不会覆盖。如何检查重复项并将时间戳附加到新文件名?请帮忙!
public static void copyFolder(File src, File dest)
throws IOException{
//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);
//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);
}
}
答案 0 :(得分:0)
您可以使用File.exist()方法检查文件是否存在,如果存在,您可以在追加模式下打开文件
代码是这样的
File f = new File(oldName);
if(f.exists() && !f.isDirectory()) {
long currentTime=System.currentTimeMillis();
String newName=oldName+currentTime;
// do the copy
}
答案 1 :(得分:0)
//construct the src and dest file structure
File srcFile = new File(src, file);
File destFile = new File(dest, file);
while (destFile.exists()) {
destFile = new File(dest, file + '-' + Instant.now());
}
在一种情况下,目标文件名为test-file.txt-2018-03-14T11:05:21.103706Z
。给出的时间是UTC。在任何情况下,您最终都会得到一个尚不存在的文件名(如果循环终止,但我很难看到它没有的情况)。
您可能希望仅将时间戳附加到普通文件并重用现有文件夹(目录),我不知道您的要求。并且您可能希望在扩展名之前附加时间戳(如果有的话)(要获得test-file-2018-03-14T11:05:21.103706Z.txt
)。我相信你做了必要的修改。