Files.copy重命名文件

时间:2013-03-05 13:58:19

标签: java

希望你能为我看一些代码:

public void Copy(Path sourcepath,
        Path targetpath) throws IOException {

    DateFormat dateFormat = new SimpleDateFormat("yyyymmdd");


    File origfile = targetpath.toFile(); // Changes targetpath to file
    String name = origfile.getName(); // Gets the name of the file to be updated
    File file1 = new File(targetpath.toString() + "." + dateFormat.format(Calendar.getInstance().getTime())); //Create a new file instance with the name of the old file + date
    origfile.renameTo(file1); //Rename the original file
    origfile.createNewFile(); //Backup the original file
    Files.delete(targetpath); //Delete the original file
    Files.copy(sourcepath, targetpath);
}

现在一切正常,备份工作和复制工作。我的初衷是将要复制的文件重命名为正在备份的文件。 (因此字符串名称= origfile.getName();

这是我的代码:

File file2 = new File(name);
File srcfile = sourcepath.toFile();
srcfile.renameTo(file2);

现在,这已经达到了一定程度,过了一段时间我开始收到IOException错误,所以经过几个小时的挣扎。我放弃了,只是删除了重命名部分。

请注意,它在复制时仍会重命名该文件。

现在我的问题:Files.copy会这样做吗?这里发生了一些神秘的事吗?它确实完全符合我的要求,但我感到很困惑。为什么我的代码有效?

是的,我想知道,万一它会中断或停止工作。我不能有工作但不知道为什么!

编辑:

发帖时抱歉有点匆忙,让我更清楚地提出问题:

我的目的是将我的sourcepath重命名为正在备份的文件的原始名称。我有代码重命名它,但它抛出了IOException,所以我删除了它。我只使用了Files.Copy,所以我假设sourcepath将保留它的原始值,并且只为我在的for循环中复制每个实例。但不,它完全重命名为正在备份的每个文件的原始文件。在哪里以及如何?

1 个答案:

答案 0 :(得分:0)

想出来!的Wooo!

因为我将目标路径转换为文件,备份它并删除它这发生了:

当我使用Files.copy(srcpath,targetpath)时,srcpath采用了targetpath的名称(文件被删除但原始路径仍然存在,因为没有发生任何事情)

基本上:我的方法发送了两个路径,我的方法创建了一个备份文件并删除了原始路径的原始文件(不是路径)。 (这将是c:\ work \ testorigfile例如。)

因此,当我使用Files.copy(srcpath,targetpath)时,它完全按照我的意愿工作。答案是javadoc(在某种意义上),所以感谢所有提示家伙!