我有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,当我第一次执行它时,它运行完美,但是第二次,它崩溃了。请帮忙我该怎么做。
答案 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
,您不能保证src
和dst
,正如@Machinarius所说,检查src.exists() && dst.exists()
可能会避免您的错误。使用deleteOnExit
也是一种很好的做法。
答案 3 :(得分:0)
在文件系统中不存在第二次运行dst
时,您应该对代码进行if (src.exists() && dst.exists())
检查,以避免错误。
答案 4 :(得分:0)
这两个delete()和renameTo()将返回true或false,具体取决于它的执行结果。如果前一步骤成功并且文件实际存在于给定路径中,您可能需要添加条件检查。