如何重命名现有文件



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

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

我在我的应用程序后台的AsyncTask中运行这个,当我第一次执行它时,它运行得很好,但第二次它崩溃了。请帮我怎么办。

尝试执行:

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

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

Docs说:

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

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

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

您应该使用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…)

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

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

相关内容

  • 没有找到相关文章