在我正在使用JDK 7u25的Windows 7中開發的一個項目中,我有一個存儲應用程序狀態的類。該類有一個靜態的save
方法將狀態保存到磁盤。我原本有以下代碼。 (state
是JSONObject
,我假設輸出目錄已不一定是當這個函數被調用創建。)可寫文件權限問題
public State {
private static String stateFile = "\\state\\state.json";
public static void save() {
try {
File sFile = new File(stateFile);
sFile.mkdirs();
sFile.setWritable(true);
FileWriter file = new FileWriter(sFile);
String str = state.toString(4);
file.write(str);
file.close();
} catch (IOException ex) {
HLogger.log(ex.getMessage());
}
}
}
每當我跑這個代碼,它記錄一個IOException - 抱怨訪問狀態文件被拒絕。我發現,如果我更改了save
函數(如下所示),它將完全按預期工作。
public static void save() {
try {
File sFile = new File(stateFile);
File path = new File(sFile.getParent());
path.mkdirs();
sFile.setWritable(true);
FileWriter file = new FileWriter(sFile);
String str = state.toString(4);
file.write(str);
file.close();
} catch (IOException ex) {
HLogger.log(ex.getMessage());
}
}
誰能解釋爲什麼它是必要的,以便獲得寫權限的文件創建一個單獨的文件對象的輸出目錄?
啊。這很有道理。謝謝! – JCVanHamme