查找 Linux 和 macintosh 上的“应用程序数据”目录

2022-09-04 03:56:10

我有一个基于LWJGL的游戏引擎,要运行它,我需要将所需的本机库放在用户的计算机上。在Windows上,我通过以下方式查找应用程序数据目录来执行此操作:

System.getenv("APPDATA");

一切都很容易和漂亮。我创建了一个File对象,必要时调用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上获得应用程序支持(我已经了解到这相当于Windows上的AppData文件夹),并且我正在尝试在Linux上使用类似的文件夹,但我不确定“user.home”是否找到了正确的文件夹。


答案 1

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


答案 2

正如在Linux上已经说过的那样,您应该/可以将您的数据放在家中的.目录中。

但是,我有一个提示:不幸的是,“APPDATA”并不总是在几个WindowsVersions中找到正确的目录。AFAIK 我知道如何正确执行此操作的唯一已知方法是调用一个名为 .SHGetFolderPath

示例:http://github.com/fab1an/appkit/blob/master/src/main/java/org/appkit/osdependant/OSFolders.java