0

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

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 能做到吗?这里发生了一些神秘的事情吗?它完全符合我的要求,但我很困惑。为什么我的代码有效?

是的,我想知道,以防它中断或停止工作。我不能有什么工作,不知道为什么!

编辑:

抱歉发帖时有点着急,让我把我的问题说得更清楚一点:

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

4

1 回答 1

0

弄清楚了!哇!

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

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

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

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

于 2013-03-06T09:00:52.417 回答