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

Writing to OSX's /Library/Application Support folder throws IOException: Permission denied

我正在尝试将我的应用数据存储到 /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:抛出权限被拒绝。

让我们开始...

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 的 read/write 权限,filename.txt 是一个目录,因此任何将其视为文件的尝试都会失败。

然而,

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

应该是……

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

这样您将写入当前用户主目录,您更有可能拥有 read/write 权限。

此外,您的 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 到 read/write 东西(因为它现在指向 System.getProperty("user.home") + "/Library/Application Support/Your Application Directory" 中的 filename.txt