将文件从一个目录复制到另一个目录,并附加带有时间戳的新文件,而不是在Java中覆盖

时间:2018-03-13 00:58:00

标签: java timestamp copy

我想将文件从源目录复制到目标。如果文件已存在于目标目录中,则使用其时间戳附加要复制的新文件,以便不会覆盖。如何检查重复项并将时间戳附加到新文件名?请帮忙!

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);
    }
}

2 个答案:

答案 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)。我相信你做了必要的修改。