【问题标题】:How to rename an existing file?如何重命名现有文件?
【发布时间】:2013-02-20 08:44:12
【问题描述】:

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

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

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

【问题讨论】:

  • 请在 logcat 崩溃时分享您的跟踪消息。 renameTo() 是返回 false 还是抛出异常?
  • 好吧,现在它没有崩溃,事实上它现在只是删除了第一个文件。

标签: java android file


【解决方案1】:

尝试做:

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

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

【讨论】:

  • 这样做又快又短!
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    文档说:

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

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

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

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

        【讨论】:

          猜你喜欢
          • 2011-02-17
          • 2014-03-27
          • 2023-03-21
          • 1970-01-01
          • 1970-01-01
          • 2016-02-04
          • 2019-12-24
          • 2020-06-02
          • 1970-01-01
          相关资源
          最近更新 更多