我正在寻找一个将文件重命名为字符串的方法。 renameTo只接受另一个文件作为参数,但我希望它取一个字符串。基本上,我如何在这里实现这个方法?
public static void renameFile(File toBeRenamed, String new_name) {
}
我想重命名文件" toBeRenamed" to" new_name"。我是否必须创建另一个名为new_name的文件,或者是否有一些解决方法?谢谢!
编辑:感谢Luiggi的回答。这是新错误的图片:
答案 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异常”
看其中一个:
您不知道如何处理已检查的例外。
为此,您应该在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();
}
您不希望您的方法抛出已检查的异常。在这种情况下,最好抛出一个未经检查的异常,因此您不需要手动处理异常。这可以通过抛出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
}
}
上一节中发布的链接中的更多信息。
您根本不想抛出异常。在这种情况下,最好至少返回一个值以了解文件是否已完全重命名:
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.");
}
选择哪一个?完全取决于你的口味。如果我是你,我会使用第三个选项进行快速脏或学习阶段工作,但对于真实世界的应用程序,我会使用第二个选项,但使用我自己的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
中提取的