0

我有一个关于存储 UUID 的问题。我想使用 Java 生成一个 UUID 并保存它,以便下次应用程序运行时可以检索它。

在我构建的 .NET 应用程序中,我正在做类似的事情。我正在使用 Windows 注册表来存储 UUID 和所有其他设置。但是,这个 Java 应用程序应该是跨平台兼容的。这就提出了问题。显然在其他操作系统上,我不会有 Windows 注册表来完成这样的任务,那么我该怎么做呢?

对于这个问题,我有一个解决方案,但我想要一些更复杂的东西。我当前的解决方案是unique.txt在应用程序的目录中存储一个文本文件(命名为 ),然后在运行时读取它。

以下是我对该解决方案的不满:

  • 如果用户将应用程序移动到新目录,则程序必须生成新的 UUID 和设置文件。
  • 我不喜欢用户可以看到位于其目录中的设置文件这一事实。

以下是我希望解决方案满足的条件:

  • 解决方案应该能够存储 UUID 值(可能还有其他变量),以便在运行时可以检索和修改它们。
  • 如果应用程序被删除然后重新下载,之前安装的值应该仍然可以检索。
  • 用于存储值的文件不应出现在应用程序的目录中(没有任何意义将用户目录与设置文件混淆)。
  • 如果用户将应用程序移动到不同的目录,应用程序应该仍然能够检索以前的设置文件。设置不应依赖于目录。

我曾考虑将设置文件存储在根目录中(/在 unix 和C:\Windows 上);但是,根据我的经验,写入根目录通常需要提升权限。我也觉得根目录不是最合适的位置。

如果 Java 有一个内置的方法来做这样的事情,我将非常感谢有人指出我的方向。否则,如果有人可以提供一些指导,那也很棒。

如果这个问题是重复的,我很抱歉。我已经搜索过类似的东西,但我没有找到答案。如果有关问题的任何内容不清楚,请添加评论,我将尝试修改问题以澄清。

先感谢您。

4

2 回答 2

2

Preferences API应该提供你需要的东西。如果您想要整个系统的通用设置,请查看systemNodeForPackage. 像这样的东西(未经测试):

class HardwareId {
    public UUID read() {
        Preferences pref = Preferences.systemNodeForPackage(HardwareId.class);
        String uuid = pref.get("UUID", null);
        if (uuid == null) {
            uuid = UUID.randomUUID().toString();
            pref.put("UUID", uuid);
            pref.flush();
        }
        return UUID.fromString(uuid);
    }
}
于 2014-10-15T19:39:28.617 回答
0

您是否考虑过数据库来存储值。

http://en.wikipedia.org/wiki/Apache_Derby

来自维基百科“Apache Derby(以前作为 IBM Cloudscape 分发)是由 Apache Software Foundation 开发的关系数据库管理系统 (RDBMS),可以嵌入到 Java 程序中并用于在线事务处理。”

于 2014-10-15T19:42:28.930 回答