在Linux和Macintosh上查找“应用程序数据”目录

14

我有一个基于LWJGL的游戏引擎,为了运行它,我需要将所需的本机库放置在用户的计算机上。在Windows上,我通过查找Application Data目录来实现:

System.getenv("APPDATA");

一切都很容易并且很好地运作。我创建一个文件对象,如果必要的话调用mkDir,并在文件尚未在计算机上时写入文件。

(注意:所创建的目录不应为临时文件,因为我想保存提取的文件以备将来使用。此外,创建此目录为保存游戏和其他数据等提供了一个简单易用的文件夹。)

然而,如果计算机是Macintosh或Linux,则我希望做类似的事情,但我对如何在这两个系统中执行此操作不太熟悉,并且我现在不在一个很好的测试位置。我查找目标目录的当前方法如下:

private static String defaultDirectory()
{
    String OS = System.getProperty("os.name").toUpperCase();
    if (OS.contains("WIN"))
        return System.getenv("APPDATA");
    else if (OS.contains("MAC"))
        return System.getProperty("user.home") + "/Library/Application "
                + "Support";
    else if (OS.contains("NUX"))
        return System.getProperty("user.home");
    return System.getProperty("user.dir");
}

那么,这是正确的方法吗?我正试图访问Mac上的Application Support(我了解到这相当于Windows上的AppData文件夹),并尝试在Linux上使用类似的文件夹,但我不确定 "user.home" 是否能找到正确的文件夹。


3
对于Linux系统,你应该遵循XDG基础目录规范。 - ergosys
这个回答解决了你的问题吗?如何跨平台获取本地应用程序数据目录的路径? - Dave Jarvis
2个回答

6

这应该是有效的。只有一件事:在Linux上,最好将设置保存在用户目录下的隐藏文件夹中。因此,在Linux上,要么将您的文件夹放在$HOME/.config下,要么以.开头使其隐藏。


3
规范说明应该首先查看某些环境变量,仅在未设置时使用 ~/.config - Mechanical snail

4

你能详细说明在什么情况下 System.getenv("APPDATA") 会失败吗?这个评价相当高的答案没有提到这一点。 - bluenote10
请查看该问题下的评论。 - Fabian Zeindl
我之所以问是因为找不到关于“APPDATA”在多个Windows版本中无法找到正确目录的评论。他们只提到了“以管理员身份运行”的问题。这是你的意思吗? - bluenote10

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接