Java 如何重命名现有文件?

Java 如何重命名现有文件?,java,android,file,Java,Android,File,我有两个文件,文件src=new文件(“loc/xyz.mp3”)和文件dst=new文件(“loc/xyz1.mp3”) 现在,我想将dst重命名为xyz.mp3,同时删除src文件。我怎样才能做到这一点? 我试着 src.delete(); dst.renameTo(src); 我在我的应用程序的后台运行AsyncTask,当我第一次执行它时,它工作得很好,但是第二次,它崩溃了。请帮助我如何执行此操作。在第二次运行时,文件系统中不存在dst,如果(src.exists()&&dst.exi

我有两个文件,
文件src=new文件(“loc/xyz.mp3”)
文件dst=new文件(“loc/xyz1.mp3”)
现在,我想将
dst
重命名为xyz.mp3,同时删除
src
文件。我怎样才能做到这一点? 我试着

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

我在我的应用程序的后台运行AsyncTask,当我第一次执行它时,它工作得很好,但是第二次,它崩溃了。请帮助我如何执行此操作。

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

这两个delete()和renameTo()将根据执行结果返回true或false。您可能需要添加条件检查,以确定上一步是否成功,并且文件是否实际存在于给定路径中。

尝试执行以下操作:

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

这将自动覆盖原始文件。这个答案取自这里:

您应该使用
文件重命名文件,它比
重命名到()
可靠得多

,java.nio.file.Path,java.nio.file.CopyOption…

文档说:

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


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

当logcat崩溃时,请共享您的logcat跟踪消息。renameTo()是否返回false或引发异常?好吧,现在它不会崩溃,实际上它现在只删除第一个文件。这样做既快又短!
Path source = currentFile.toPath();
try {
     Files.move(source, source.resolveSibling(formattedName));
} catch (IOException e) {
     e.printStackTrace();
}