![](/img/trans.png)
[英]file.delete() returns false even though file.exists(), file.canRead(), file.canWrite(), file.canExecute() all return true
[英]File.canWrite() returns false after reassignment
我有一個寫入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.");
}
每當程序進入while
循環中的最后一個else-if
while
,它都會將csvFile
更改為另一個值,然后變為unwritable 。 如果我從來沒有遇到過else-if
語句並且csvFile
與while
循環之前的初始聲明保持相同, csvFile
可以正常工作。
@Andreas 指出,如果文件不存在,則 canWrite() 返回 false,所以我首先必須調用csvFile.createNewFile()
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.