使用Java在Windows和OS X上保存程序配置文件的最佳位置?

时间:2009-08-21 18:59:22

标签: java file-io filesystems swt

我有一个在Windows XP / Vista / 7和Mac OS X上运行的SWT Java应用程序。我目前正在将配置文件保存到:

System.getProperty(“user.home”)+ filename

随着Windows Vista和Windows 7安全性的变化,这似乎不再是保存它的最佳位置。

此文件会保存注册密钥信息等信息,如果无法保存或删除文件,我的用户会感到烦恼。

我应该使用更好的路径吗?

此外,Mac OS X上每个用户应用程序数据的首选路径是什么?

3 个答案:

答案 0 :(得分:2)

安全方面有哪些变化?我知道他们禁止在Program Files中写作,我不知道他们禁止在用户家中写作 这将是一个严重的兼容性中断,我有很多应用程序在那里写,可以直接写入文件,也可以在文件夹中(在Unix模式下“隐藏”,即以点为前缀)。
现在,用Application Data folder和其他许多应用程序(但似乎很少使用以前的解决方案的跨平台应用程序)一样写入Preferences API似乎更“友好”了,但确切位置似乎很难在Java中查找,需要平台检测才能在其他平台上执行其他操作。

另一种选择似乎是使用java.util.prefs.Preferences,即。 {{3}}

答案 1 :(得分:2)

要保留的应用程序数据的OSX路径是“〜/ Library / Application Support”,符合Apple documentation

答案 2 :(得分:0)

Sun本身及其java控制面板存在同样的问题(bug 6487334):他们的控制面板在不同的完整性级别运行,无法同时读取/写入其部署目录。

他们将其移至c:\users\<username>\appdata\local,但不得不依赖System.getProperty("user.home"),因为到目前为止,它使用了一个注册表KEY,如果Windows被“调整”,可以设置为不正确的值:{{ 3}}

因此,使用HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders\*的问题bug 6519127是开始寻找设置的读/写访问权的正确位置。
例如,您可以使用How to get local application data folder in Java? project。

来阅读它

将数据保存在用户homedir中的兴趣在于它们将成为用户配置文件的一部分,可以是SWT Win32 Extension,在注销时保存并在登录时恢复(在公司的工作站上经常使用)