【问题标题】:Find directory for "application data" on linux and macintosh在 linux 和 macintosh 上查找“应用程序数据”目录
【发布时间】:2011-09-27 12:26:25
【问题描述】:

我有一个基于 LWJGL 的游戏引擎,要运行它,我需要将所需的本机库放到用户的计算机上。在 Windows 上,我通过以下方式找到 Application Data 目录:

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" 找到正确的。

【问题讨论】:

  • 对于 linux,您可能应该遵循 XDG basedir 规范。

标签: java linux macos file directory


【解决方案1】:

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

【讨论】:

  • 规范说你应该首先查看某些环境变量,如果没有设置,只使用~/.config
【解决方案2】:

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

不过,我有一个提示给您:不幸的是,“APPDATA”并不总能在多个 Windows 版本中找到正确的目录。 AFAIK 我知道如何正确执行此操作的唯一方法是调用名为 SHGetFolderPath 的 msdn 函数。

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

【讨论】:

  • 您能否详细说明System.getenv("APPDATA") 在哪些情况下会失败?这个评分相当高的answer 没有提到这一点。
  • 查看该问题的 cmets。
  • 我之所以问是因为找不到关于 “APPDATA”的评论,但在多个 Windows 版本中并不总能找到正确的目录。他们只提到“运行方式”问题。这是你的意思吗?
猜你喜欢
  • 1970-01-01
  • 2018-09-15
  • 2012-01-11
  • 2011-11-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多