【问题标题】:Rename file onto another in java在java中将文件重命名为另一个
【发布时间】:2008-11-06 17:48:23
【问题描述】:

我有一个需要重命名为现有文件的文件。这是对现有 JAR 文件的复制、修改、替换原始操作。我已经完成了前两个步骤,我只需要更换原始位的帮助。将 JAR 的新版本重命名为旧版本的最佳方法是什么?旧的 JAR 不需要保留,我不想保留新 JAR 的副本并保留其初始名称。

我已经有 commons lang 和 io,所以如果有我错过的方法,那就太好了。

【问题讨论】:

  • 是包含在 JAR 文件中的文件,还是 Jar 文件本身?

标签: java file


【解决方案1】:

Java.io.File.renameTo(java.io.File)

您可能需要先在原始文件上调用File.delete() - 有些系统不会将文件重命名为现有文件。

【讨论】:

  • 刚刚在 Windows XP 上检查过,如果不删除原件,这将无法正常工作。
  • 是抛出异常还是仅仅返回 false?
【解决方案2】:

您将需要创建两个java.io.File 对象:一个用于新文件,一个用于旧文件。

让我们称之为oldFilenewFile

oldFile.delete()
newFile.renameTo(oldFile);

编辑:mmyers 打败了我。

【讨论】:

  • renameTo 依赖于平台,可能并非在所有情况下都有效。你应该经常检查它是否成功。
【解决方案3】:

这应该让你相当接近:

public boolean replaceOldJar(String originalJarPath, java.io.File newJar) {
    java.io.File originalJar = new java.io.File(originalJarPath);
    if (!originalJar.isFile()) {
        return false;
    }
    boolean deleteOldJarSucceeded = originalJar.delete();
    if (!deleteOldJarSucceeded) {
        return false;
    }
    newJar.renameTo(originalJar);
    return originalJar.exists();
}

【讨论】:

    【解决方案4】:

    deleting旧的和renaming新的有问题吗?

    【讨论】:

      【解决方案5】:

      我不完全确定您是否只是在询问如何重命名文件系统中的文件,或者您是否还想重新加载这个新版本的 jar?

      重命名部分听起来很简单...只需使用 File.renameTo... 不幸的是,有很多与此相关的平台特定问题。有些平台不允许您覆盖现有文件,有些平台不允许您重命名文件,以便将位置更改到另一个分区。如果你想让这个过程完全安全,你需要自己做这个过程,首先删除旧文件,然后重命名新文件(如果可以更改分区,则复制)。如果您的应用程序/机器在执行此操作时崩溃,这自然容易出现问题,因为它不再是原子操作。因此,您需要在应用程序启动过程中添加一个检查,以查找崩溃发生时处于中间的重命名操作。如果您只是以这种方式更新单个文件,那应该很容易。

      但是,如果您真的想重新加载 jar,还有一些问题需要解决,但您需要更详细地了解情况,以获得有关如何执行此操作的正确建议。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-07-13
        • 2011-10-28
        • 1970-01-01
        • 1970-01-01
        • 2015-05-10
        • 1970-01-01
        • 2017-02-08
        • 1970-01-01
        相关资源
        最近更新 更多