在我正在使用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