在Java中保存用户设置/数据库/缓存...(在每个操作系统上)

时间:2008-12-02 08:12:55

标签: java operating-system settings configuration-files

我的Java应用程序正在“user.home”中保存内容,但在Windows上,这似乎不是保存应用程序信息的正确途径(正如朋友告诉我的那样)。另一种选择是使用首选项api,但是无法使用首选项api设置hsqldb位置。此外,我希望所有文件都在同一文件夹中可用(本地数据库,配置,缓存,...)。

我正在寻找一些示例代码或一个处理特定于os的东西的框架。

5 个答案:

答案 0 :(得分:3)

在我的WinXP Pro SP3系统上,user.home指向C:\Documents and settings\<username> 许多应用程序只是将它们的数据存储在那里(而不是这个路径+应用程序数据,但其他一些应用程序数据),创建一个Unix风格的目录,即。点+应用程序名称(例如:.antexplorer,.sqlworkbench,.squirrel-sql,.SunDownloadManager,.p4qt,.gimp-2.4等)。

看起来像是一种体面的,常见的做法......

答案 1 :(得分:1)

窗口应用程序在user.home中保存数据但不是“错误”是不常见的。 Windows应用程序喜欢在整个地方传播他们的数据(注册表中的一点,应用程序安装目录中的一点,Windows目录中的一点,System32中的一点,这里有点,有点)。最后,这使得无法干净地备份或删除导致着名的“Windows腐烂”的东西(即你必须每隔几个月重新安装一次)。

反正。如果你真的不想使用user.home(我认为没有理由不这样做),可以使用像this from Apache commons-lang这样的代码来判断你是否在Windows上运行。如果结果为true,则弹出一个目录选择对话框,用户可以在其中指定要保存数据的位置。

将此信息保存在“偏好设置”中,并在下次启动应用时使用此路径。这样,用户可以指定他们想要数据的位置,您只需要在首选项中留下一点信息。

答案 2 :(得分:1)

对于应用程序“foo”,我将在user.home中创建一个名为“.foo”的目录。对于Windows来说,它看起来有点奇怪,但几乎没有人在该目录中查找(并且它无论如何都充满了晦涩的目录)并且在Linux / Solaris / ...上它将导致一个隐藏的目录,不会使用户的主目录混乱视觉上。

答案 3 :(得分:1)

动态读取(从您的代码中)APPDATA环境变量的值,并将配置文件存储在%APPDATA%\\.myapp\config

==&GT;值取决于平台,不使用任何硬编码路径,始终读取env。变种

答案 4 :(得分:0)

问题不是Wiindows,而是标准的java设置。

长篇大论 http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4787931>Here

我建议在命令行上的'-D MYLOC =%USERPROFILE%'属性中选择它。

请注意,如果用户进行了桌面登录,您将只获得“USERPROFILE”,如果用户使用citrix或类似方式或通过ssh远程登录,则不会设置此项,此外,coprporate桌面会乱用此设置并且可能会将其设置为无法使用的东西。