重新分配后File.canWrite()返回false

时间:2019-07-16 18:13:13

标签: java file

我有一个写入 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语句,并且csvFilewhile循环之前的初始声明相同,那么它会很好地工作。

1 个答案:

答案 0 :(得分:0)

@Andreas指出,如果文件不存在,canWrite()将返回false,因此我首先必须调用csvFile.createNewFile()