如何在不创建其他文件的情况下重命名文件(Java)

时间:2014-05-18 22:46:47

标签: java rename

我正在寻找一个将文件重命名为字符串的方法。 renameTo只接受另一个文件作为参数,但我希望它取一个字符串。基本上,我如何在这里实现这个方法?

public static void renameFile(File toBeRenamed, String new_name) {

}

我想重命名文件" toBeRenamed" to" new_name"。我是否必须创建另一个名为new_name的文件,或者是否有一些解决方法?谢谢!

编辑:感谢Luiggi的回答。这是新错误的图片:

enter image description here

2 个答案:

答案 0 :(得分:5)

File类不代表硬盘中的物理文件,它只是一个抽象表示。创建File类的新实例并不意味着您正在创建物理文件。

通过了解这一点,您可以使用新的File重命名文件,而无需担心创建新的物理文件。代码改编自Rename a file using Java

public static void renameFile(File toBeRenamed, String new_name)
    throws IOException {
    //need to be in the same path
    File fileWithNewName = new File(toBeRenamed.getParent(), new_name);
    if (fileWithNewName.exists()) {
        throw new IOException("file exists");
    }
    // Rename file (or directory)
    boolean success = toBeRenamed.renameTo(fileWithNewName);
    if (!success) {
        // File was not successfully renamed
    }
}

编辑:根据您的问题更新和此评论:

  

我拍了一张错误的图片。 “未处理的异常类型IO异常”

看其中一个:

  1. 您不知道如何处理已检查的例外。

    为此,您应该在Exception语句中包装抛出try-catch(或子类)的方法:

    String new_name = getFilename(file);
    try {
        renameFiles(files[i], new_name);
    } catch (IOException e) {
        //handle the exception
        //using a basic approach
        e.printStacktrace();
    }
    

    更多信息:Java Tutorial. Lesson: Exceptions

  2. 您不希望您的方法抛出已检查的异常。在这种情况下,最好抛出一个未经检查的异常,因此您不需要手动处理异常。这可以通过抛出RuntimeException的新实例或其子类来完成:

    public static void renameFile(File toBeRenamed, String new_name) {
        File fileWithNewName = new File(new_name);
        if (fileWithNewName.exists()) {
            throw new RuntimeException("file exists.");
        }
        // Rename file (or directory)
        boolean success = toBeRenamed.renameTo(fileWithNewName);
        if (!success) {
            // File was not successfully renamed
        }
    }
    

    上一节中发布的链接中的更多信息。

  3. 您根本不想抛出异常。在这种情况下,最好至少返回一个值以了解文件是否已完全重命名:

    public static boolean renameFile(File toBeRenamed, String new_name) {
        //need to be in the same path
        File fileWithNewName = new File(toBeRenamed.getParent(), new_name);
        if (fileWithNewName.exists()) {
            return false;
        }
        // Rename file (or directory)
        return toBeRenamed.renameTo(fileWithNewName);
    }
    

    并相应地更新您的代码:

    String new_name = getFilename(file);
    boolean result = renameFiles(files[i], new_name);
    if (!result) {
        //the file couldn't be renamed
        //notify user about this
        System.out.println("File " + files[i].getName() + " couldn't be updated.");
    }
    
  4. 选择哪一个?完全取决于你的口味。如果我是你,我会使用第三个选项进行快速脏或学习阶段工作,但对于真实世界的应用程序,我会使用第二个选项,但使用我自己的RuntimeException扩展的自定义异常。

答案 1 :(得分:1)

也许这对你有用

// File (or directory) with old name
File file = new File("oldname");

// File (or directory) with new name
File file2 = new File("newname");
if(file2.exists()) throw new java.io.IOException("file exists");

// Rename file (or directory)
boolean success = file.renameTo(file2);
if (!success) {
    // File was not successfully renamed
}

这是从类似问题Rename a file using Java

中提取的