4

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

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

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

4

5 回答 5

15

尝试做:

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

这应该会自动覆盖原始文件。这个答案取自这里:如何重命名现有文件

于 2013-02-20T00:34:08.283 回答
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...)

于 2013-02-20T00:43:30.510 回答
1

文档说:

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

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

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

于 2013-02-20T00:44:12.533 回答
0

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

于 2013-02-20T00:27:08.613 回答
0

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

于 2013-02-20T00:29:32.517 回答