【问题标题】:Platform-independent way to get a path to store program data获取存储程序数据路径的独立于平台的方式
【发布时间】:2014-01-02 15:09:21
【问题描述】:
是否有一种独立于平台的方式来获取在 Java 中存储程序数据的路径?
这无疑是一个非常基本的问题,但我似乎无法在任何地方找到答案。我正在寻找存储用户数据(例如用户偏好或历史数据输入)的路径。在 Windows 上,我们通常会将其存储在 C:\Program Files\APPNAME、C:\Program Files (x86)\APPNAME 或 C:\ProgramData\APPNAME 中,具体取决于操作系统和架构。在 Unix 上,我们可以根据上下文将首选项存储在 /etc/APPNAME 或 /opt/APPNAME 中。在 Mac 上,我们有一个特殊的柜子来存储程序的数据。在java中,我们如何以独立于平台的方式获得这样的位置?
【问题讨论】:
标签:
java
cross-platform
persistence
【解决方案1】:
系统属性user.home 在大多数桌面系统中应该是相当标准的。
System.out.println(System.getProperty("user.home"));
请注意,这是运行 Java 进程的用户 - 因此在服务器端 Java 进程的情况下,您需要将应用用户的信息存储在自己的数据结构中,因为您的应用的用户是未知的到操作系统。
关于系统范围的存储位置,您可能需要检测操作系统版本并计算路径。另一个问题是您很可能需要提升权限才能写入系统范围的位置。
【解决方案2】:
寻找将设置存储在user.home 的(子)目录中。它不仅是应用程序的地方。可以合理地期望具有读写权限,但它是跨平台的。
子目录可能基于类的完全限定名称或包名称,以防止冲突。即。
package our.com.main;
将写入子目录our/com/main。