写入OSX的/ Library / Application Support文件夹会抛出IOException:权限被拒绝

时间:2015-11-09 23:49:56

标签: java macos file permissions writefile

我正在尝试将我的应用数据存储到/ Library / Application Support / myAppFolder。

我正在尝试使用此代码(通过调试)

String content = "This is the content to write into file";

File file = new File("/Library/Application Support/filename.txt");


            // if file doesnt exists, then create it
            if (!file.exists()) {
                file.mkdir();
                    file.createNewFile();
            }

            FileWriter fw = new FileWriter(file.getAbsoluteFile());
            BufferedWriter bw = new BufferedWriter(fw);
            bw.write(content);
            bw.close();

            System.out.println("Done");

但java.io.IOException:抛出Permission denied。

1 个答案:

答案 0 :(得分:1)

让我们从...开始

if (!file.exists()) {
    file.mkdir();
    file.createNewFile();
}

FileWriter fw = new FileWriter(file.getAbsoluteFile());
BufferedWriter bw = new BufferedWriter(fw);

您创建了一个名为/Library/Application Support/filename.txt的目录,然后尝试创建一个名为/Library/Application Support/filename.txt的文件,然后尝试读取所述文件......这是一个目录......

我们暂时假设您实际拥有/Library/Application Support的读/写权限,filename.txt是一个目录,因此任何将其视为文件的尝试都将失败。

然而,

File file = new File("/Library/Application Support/filename.txt");

应该是......

File file = new File(System.getProperty("user.home") + "/Library/Application Support/filename.txt");

这样您就可以写入当前用户的主目录,而您更有可能拥有读/写权限。

此外,您的file应该指向您的应用程序目录(而不是文件)

File file = new File(System.getProperty("user.home") + "/Library/Application Support/Your Application Directory");

然后你可以使用更像......

的东西
if (file.exists() || file.mkdir()) {
    file = new File(file, "filename.txt");
    file.createNewFile();
}

现在您可以使用file来读取/写入内容(因为它现在指向filename.txt内的System.getProperty("user.home") + "/Library/Application Support/Your Application Directory"