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

问题描述 投票:0回答:5

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

我正在寻找一些示例代码或负责特定于操作系统的内容的框架。

java operating-system settings configuration-files
5个回答
3
投票

在我的WinXP Pro SP3系统上,user.home指向

C:\Documents and settings\<username>
很多应用程序只是将数据存储在那里(而不是这个路径+应用程序数据,但其他一些应用程序会存储到那里),以 Unix 风格创建一个目录,即。点 + 应用程序名称(示例:.antexplorer、.sqlworkbench、.squirrel-sql、.SunDownloadManager、.p4qt、.gimp-2.4 等)。

看起来是一种不错的常见做法...


1
投票

窗口应用程序将数据保存在 user.home 中是不寻常的,但并非“错误”。 Windows 应用程序喜欢将其数据分布在各处(注册表中的一点、应用程序的安装目录中的一点、Windows 目录中的一点、System32 中的一点、这里一点、那里一点)。最后,这使得无法干净地备份或删除某些内容,从而导致著名的“Windows 腐烂”(即您必须每隔几个月重新安装一次)。

无论如何。如果您确实不想使用 user.home(我认为没有理由不这样做),请使用 Apache commons-lang 中的 this 之类的代码来确定您是否在 Windows 上运行。如果结果为 true,则会弹出一个目录选择对话框,用户可以在其中指定要保存数据的位置。

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


1
投票

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


1
投票

(从代码中)动态读取

APPDATA
环境变量的值,并将配置文件存储在
%APPDATA%\\.myapp\config

==> 值取决于平台,不要使用任何硬编码路径,始终读取环境。变种


0
投票

问题不是 Windows 而是标准 Java 设置。

长时间讨论: JDK-4787931

我建议在命令行上的

-D MYLOC=%USERPROFILE%
属性上选择它。

请注意,如果用户进行桌面登录,您只会获得“用户配置文件”,如果用户使用 Citrix 或类似工具或通过 SSH 远程登录,则不会设置此设置,此外,企业桌面会混乱此设置,并且可能会设置它变成了无法使用的东西。

© www.soinside.com 2019 - 2024. All rights reserved.