我正在寻找一种简单的跨平台方法,在 JVM 上获取用于存储应用程序设置和缓存数据的适当目录。例如,在 XDG 规范下的 Linux 上:
~/.config/appname
~/.cache/appname
Windows 的东西进入
C\Users\user\Application Data
或类似的东西(在 Win 7 上);我猜 Mac 将东西放在了 ~/Library/Application Settings
下。
是否有跨平台调用来获取这些路径位置?我一直没能找到一个,尽管我发现有几个问题询问它。是否有一些库为大多数常见桌面平台实现了正确的逻辑?
最坏的情况,我可以只查找
user.home
并假装一切都是基于 XDG 的 Linux 环境。但如果很容易为用户的操作系统获取正确的目录,我愿意这样做。
FileSystemView
类是我所知道的唯一一个包含对此类通用目录的访问权限的类,并且是跨平台的。请参阅文档此处
此类包含一些可能有用的方法,例如
getHomeDirectory()
和 getDefaultDirectory()
。此类由 Swing 接口的 JFileChooser
使用。我知道它并不直接指向配置和缓存目录,但这可能是您朝着正确方向迈出的一步。
对于我自己的应用程序,我采取次优方法,尝试将所有配置和设置包含在应用程序本身中 - 即。在应用程序安装目录下创建一个“config”目录。尽管它不是整个操作系统配置的中心位置,但至少它将它保留在 java 应用程序上下文中。
我们基本上设置了一个提供此信息的实用程序类,主要基于
user.home
和 os.name
系统属性。
我们有一系列方法可以让我们建立路径位置,比如......
SystemUtilities.getApplicationSettingsPath("Name of my awesome app");