代码之家  ›  专栏  ›  技术社区  ›  Somatik

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

  •  7
  • Somatik  · 技术社区  · 16 年前

    我的Java应用程序在“用户.HOST”中保存了一些东西,但是在Windows上,这似乎不是保存应用程序信息的正确路径(正如一位朋友告诉我的)。另一个选项是使用首选项API,但无法使用首选项API设置hsqldb位置。另外,我希望所有文件都在同一个文件夹(本地数据库、配置、缓存等)中可用。

    我正在寻找一些示例代码或框架来处理操作系统特定的东西。

    5 回复  |  直到 13 年前
        1
  •  3
  •   PhiLho    16 年前

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

    看起来像是一种体面的惯例…

        2
  •  1
  •   Aaron Digulla    16 年前

    Windows应用程序在user.home中保存数据是不常见的,但不会“出错”。Windows应用程序喜欢将数据分散到各处(一点在注册表中,一点在应用程序的安装目录中,一点在Windows目录中,一点在System32中,一点在这里,一点在那里)。最后,这使得清理备份或删除某些东西变得不可能,而这些东西会导致著名的“windows rot”(即,您必须每隔几个月重新安装一次)。

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

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

        3
  •  1
  •   Joachim Sauer    16 年前

    对于应用程序“foo”,我将在user.home中创建一个名为“.foo”的目录。对于Windows来说,它看起来有点奇怪,但是几乎没有人在那个目录(而且它总是充满了不清晰的目录)和linux/solaris/上进行查找。它将导致一个隐藏的目录,而不会使用户的主目录看起来杂乱无章。

        4
  •  1
  •   agf    13 年前

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

    ==>值取决于平台,不使用任何硬编码路径,始终读取env。VAR

        5
  •  0
  •   James Anderson    16 年前

    问题不是WiDOWS,而是标准的Java设置。

    长期讨论 http://bugs.sun.com/bugdatabase/view_bug.do?Bug_id=4787931>此处

    我建议您在命令行的“-d myloc=%userprofile%”属性中选择此项。

    请注意,只有当用户进行了桌面登录时,才会获得“用户配置文件”,如果用户远程使用Citrix或类似工具登录或通过ssh登录,则不会设置此配置文件,同时,共同解析桌面会使此设置混乱,并可能将其设置为不可用的设置。