我有一个写入 csv 文件的系统。如果用户输入的文件名已经存在,则询问他们是否要覆盖它或重命名它。如果他们选择覆盖它,则系统运行正常。但是,当他们选择重命名时,会出错,因为文件对象的canWrite()
方法返回false
。
String saveName = scanner.next();
File csvFile = Paths.get(saveName + ".csv").toFile();
while (csvFile.exists()) {
char answer = scanner.next().charAt(0);
if (answer == 'y') {
scanner.close();
break;
}
else if (answer == 'n') {
scanner.close();
throw new IllegalArgumentException("Error: Rerun program with unique filename.");
}
else if (answer == 'r') {
String response = scanner.next();
csvFile = Paths.get(response + ".csv").toFile();
}
}
if (!csvFile.canWrite()) {
scanner.close();
throw new IOException("Error: " + csvFile.getPath() + " is not writable.");
}
程序每次进入else-if
循环中的最后一个while
时,它将csvFile
更改为另一个值,然后变为不可写。如果我从没有去过else-if
语句,并且csvFile
与while
循环之前的初始声明相同,那么它会很好地工作。
答案 0 :(得分:0)
@Andreas指出,如果文件不存在,canWrite()将返回false,因此我首先必须调用csvFile.createNewFile()
。