我正在寻找一个将文件重命名为字符串的方法.renameTo只接受另一个文件作为参数,但我希望它取一个字符串.所以基本上,我如何在这里实现这个方法?
public static void renameFile(File toBeRenamed, String new_name) {
}
Run Code Online (Sandbox Code Playgroud)
我想将文件"toBeRenamed"重命名为"new_name".我是否必须创建另一个名为new_name的文件,或者是否有一些解决方法?谢谢!
编辑:感谢Luiggi的回答.这是新错误的图片:

本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异常"
看其中一个:
您不知道如何处理已检查的异常.
为此,您应该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();
}
Run Code Online (Sandbox Code Playgroud)
更多信息:Java教程.课程:例外.
您不希望您的方法抛出已检查的异常.在这种情况下,最好抛出一个未经检查的异常,因此您不需要手动处理异常.这可以通过抛出一个新的实例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)
更多信息,请参见上一节中发布的链接.
你根本不想抛出异常.在这种情况下,最好至少返回一个值以了解文件是否已完全重命名:
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.
| 归档时间: |
|
| 查看次数: |
4554 次 |
| 最近记录: |