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());
}
}
ファイルの書き込み権限を取得するために、別のファイル オブジェクトに出力ディレクトリを作成する必要がある理由を説明できる人はいますか?