在我正在使用 JDK 7u25 在 Windows 7 中进行的项目中,我有一个存储应用程序状态的类。该类具有save
将状态保存到磁盘的静态方法。我最初有以下代码。(state
是 aJSONObject
并且我假设在调用此函数时不一定创建输出目录。)
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());
}
}
谁能解释为什么需要在单独的文件对象中创建输出目录才能获得文件的写权限?