Java Store UUID

时间:2014-10-15 19:25:10

标签: java registry guid uuid hardware-id

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

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

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

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

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

以下是我想要满足的解决方案的条件:

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

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

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

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

提前谢谢。

2 个答案:

答案 0 :(得分:2)

The 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);
    }
}

答案 1 :(得分:0)

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

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

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