【问题标题】:Writing to OSX's /Library/Application Support folder throws IOException: Permission denied写入 OSX 的 /Library/Application Support 文件夹会引发 IOException: Permission denied
【发布时间】:2016-02-10 18:27:46
【问题描述】:

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

【问题讨论】:

    标签: java macos file permissions writefile


    【解决方案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" 中)

    【讨论】:

    • @l'L'l 是的,这是我的假设,因此建议使用 System.getProperty("user.home") 作为路径的前缀
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-24
    • 1970-01-01
    • 2022-08-18
    • 1970-01-01
    • 1970-01-01
    • 2013-10-20
    • 1970-01-01
    相关资源
    最近更新 更多