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

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

System.getenv("APPDATA"); 

一切都很简单,很好用。 我创build一个File对象,如果需要的话调用mkDir,如果这些文件不在机器上,就写这些文件。

(注意:创build的目录不应该是一个临时文件,因为我想保存提取的文件以供将来运行。另外,创build这个目录给保存的游戏和其他这样的数据提供了一个简单易用的文件夹。)

但是,如果计算机是Macintosh或Linux,我想要做类似的事情,但是我不太熟悉如何使用这两种系统,而且我也不是很好的testing位置。 我目前find目标目录的方法是这样的:

 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上使用类似的文件夹,但我不确定是否“用户。家“find正确的。

Solutions Collecting From Web of "在linux和macintosh上查找“应用程序数据”的目录"

这应该工作。 只是一件事:在Linux上,最好将设置保存在用户目录的隐藏文件夹中。 所以对于Linux来说,把你的文件夹放在$ HOME / .config下,或者用. 使其隐藏。

正如在Linux上已经说过的,你应该可以把你的数据放在家里的.directory中。

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

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