如何重命名现有文件?

时间:2013-02-20 00:17:09

标签: java android file

我有2个文件,File src = new File("loc/xyz.mp3")File dst=new File("loc/xyz1.mp3") 现在,我想在删除dst文件时将src重命名为xyz.mp3。我怎么能做到这一点? 我在努力,

src.delete();
dst.renameTo(src);

我在我的应用程序的后台运行AsyncTask,当我第一次执行它时,它运行完美,但是第二次,它崩溃了。请帮忙我该怎么做。

5 个答案:

答案 0 :(得分:15)

尝试做:

new File("loc/xyz1.mp3").renameTo(new File("loc/xyz.mp3"));

这应该会自动覆盖原始文件。这个答案来自这里:How to rename an existing file

答案 1 :(得分:1)

您应该使用Files重命名文件,它比renameTo()更可靠。

Path source = currentFile.toPath();
try {
     Files.move(source, source.resolveSibling(formattedName));
} catch (IOException e) {
     e.printStackTrace();
}

http://docs.oracle.com/javase/7/docs/api/java/nio/file/Files.html#move(java.nio.file.Path,java.nio.file.Path,java.nio.file.CopyOption ...)

答案 2 :(得分:1)

文档说:

  

重命名此抽象路径名表示的文件。       

此方法行为的许多方面都是固有的       依赖于平台:重命名操作可能无法移动       从一个文件系统到另一个文件系统的文件,它可能不是原子的,它       如果文件具有目标抽象路径名,则可能不会成功       已经存在。应始终检查返回值以确保       重命名操作成功。

AsyncTask,您不能保证srcdst,正如@Machinarius所说,检查src.exists() && dst.exists()可能会避免您的错误。使用deleteOnExit也是一种很好的做法。

答案 3 :(得分:0)

在文件系统中不存在第二次运行dst时,您应该对代码进行if (src.exists() && dst.exists())检查,以避免错误。

答案 4 :(得分:0)

这两个delete()和renameTo()将返回true或false,具体取决于它的执行结果。如果前一步骤成功并且文件实际存在于给定路径中,您可能需要添加条件检查。