Java 可写文件权限问题

Java 可写文件权限问题,java,windows,Java,Windows,在我在Windows7中使用JDK7U25进行的一个项目中,我有一个存储应用程序状态的类。该类有一个静态save方法将状态保存到磁盘。我最初有以下代码。(state是一个JSONObject,我假设调用此函数时不一定创建了输出目录。) 每当我运行这段代码时,它都会记录一个IOException——抱怨对状态文件的访问被拒绝。我发现,如果我更改了save函数(如下所示),它将完全按照预期工作 public static void save() { try {

在我在Windows7中使用JDK7U25进行的一个项目中,我有一个存储应用程序状态的类。该类有一个静态
save
方法将状态保存到磁盘。我最初有以下代码。(
state
是一个
JSONObject
,我假设调用此函数时不一定创建了输出目录。)

每当我运行这段代码时,它都会记录一个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());
        }
    }

有人能解释为什么需要在单独的文件对象中创建输出目录才能获得文件的写入权限吗?

这不是权限失败,而是滥用了
FileWriter

在第一个代码段中,调用将创建名为
state.json
的目录,因为它:

创建以此抽象路径名命名的目录,包括任何必要但不存在的父目录。请注意,如果此操作失败,则可能已成功创建了一些必要的父目录

然后尝试使用
FileWriter
写入目录,但失败。以下是来自的
抛出
子句:

IOException
-如果文件存在,但它是一个目录而不是一个常规文件,不存在但无法创建,或者由于任何其他原因无法打开


第二个代码段创建了一个名为
state
(因为它使用的是
\\state\\state.json
)的父目录,然后创建了一个名为
state.json
的文件,因此在一个成功的常规文件上使用
FileWriter

Ah。这很有道理。谢谢
    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());
        }
    }