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

use*_*300 0 java rename

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

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

}
Run Code Online (Sandbox Code Playgroud)

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

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

在此输入图像描述

Lui*_*oza 5

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

通过了解这一点,您可以使用新文件重命名文件,File而无需担心创建新的物理文件.代码改编自使用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
    }
}
Run Code Online (Sandbox Code Playgroud)

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

我拍了一张错误的照片."未处理的异常类型IO异常"

看其中一个:

  1. 您不知道如何处理已检查的异常.

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

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

    更多信息:Java教程.课程:例外.

  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
        }
    }
    
    Run Code Online (Sandbox Code Playgroud)

    更多信息,请参见上一节中发布的链接.

  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);
    }
    
    Run Code Online (Sandbox Code Playgroud)

    并相应地更新您的代码:

    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.");
    }
    
    Run Code Online (Sandbox Code Playgroud)

哪一个选择?完全取决于你的口味.如果我是你,我会使用第三个选项进行快速的脏或学习阶段工作,但对于真实世界的应用程序,我会使用第二个选项,但使用我自己的自定义异常RuntimeException.