【问题标题】:Platform Independent File Storage Java独立于平台的文件存储 Java
【发布时间】:2013-04-05 14:44:17
【问题描述】:

我正在制作一个 Java 游戏,它将选项和 LWJGL jar 存储在标准应用程序数据存储目录中(我认为在 Windows 上是 C:\Users\user\AppData\roaming\application,在 Linux 上是 ~/.application,并且~/Library/Preferences 在 Mac 上)。目前我只使用 System.getProperty(os.name) 并有一个 if-else 来选择正确的文件路径(它使用 system.getProperty(user.home) 并附加正确的文件路径)。但是,这可能不适用于某些奇怪的操作系统,因为 if-else 不会在操作系统名称中找到 Windows、Mac 或 Linux,而且这似乎也是一种非常糟糕的方法(也是 if-如果不是 Windows 或 Mac,则假定操作系统是 Linux)。我尝试反编译 Minecraft,它将应用程序数据和 LWJGL jar 存储在正确的路径中,但代码被混淆了。有什么更好的方法可以做到这一点,还是应该在 os.name 上坚持使用 if-else?

【问题讨论】:

  • 真的有必要将这些文件存放在特定位置吗?
  • 另请参阅:1) Preferences “此类允许应用程序存储和检索用户和系统首选项和配置数据。这些数据永久存储在依赖于实现的后备存储中。” 2) JWS 应用的PersistenceService。 3) 小程序的 Cookie。

标签: java cross-platform persistence file-storage


【解决方案1】:

Java Preferences API 是专门为此目的而创建的。

【讨论】:

    【解决方案2】:

    对于配置首选项,有 Java Preferences API。

    对于其他文件,我还没有找到解决方案。目前最好的解决方案可能是基于user.home 属性在操作系统类型上调度。

    在 Linux/Unix(不是 Mac)上,您可能需要使用 XDG Base Directory specification

    【讨论】:

      【解决方案3】:

      这样的路径不应该无处不在,即没有 if-else-if:

      String userHome = System.getProperty("user.home");
      if (!userHome.endsWith("/")) {
        userHome += "/";
      }
      
      String targetPath = userHome + ".myapp/settings.properties";
      

      【讨论】:

      • 这应该适用于任何地方,但它不适合存储首选项的标准位置(如 Windows 上的 user.home/AppData/roaming/appName/)。
      猜你喜欢
      • 1970-01-01
      • 2012-12-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多