Java 存储 UUID

标签 java registry guid uuid hardware-id

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

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

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

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

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

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

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

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

如果 Java 有一个内置方法可以完成这样的事情,我将非常感谢有人为我指出它的方向。否则,如果有人可以提供一些指导,那就太好了。

如果这个问题重复,我深表歉意。我已经搜索过类似的东西,但我还没有找到答案。如果问题有任何不清楚的地方,请添加评论,我会尝试修改问题以澄清。

提前谢谢您。

最佳答案

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

关于Java 存储 UUID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26390488/

相关文章:

java - 使用 JarClassLoader 帮助从 java 程序中运行 jar

image - 使用 Docker 从私有(private)注册表加载具有依赖项的镜像

window - Win 注册表 HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Installer\{CODE} 中使用的 {CODE} 是什么?

c# - 如果我在重新启动时启动我的应用程序,MyApp 会在几秒钟后崩溃

GUID,30 个字符的随机字符串

c# - 如何将字符串转换为 Guid?

java - 为什么我尝试在 Spring Boot 应用程序上配置数据库连接时会出现此异常?创建名称为 'dataSource' 的 bean 时出错

java - 为什么我的 RecyclerView 显示 CardView 项目的顺序不正确?

java - 如何关闭无限循环锁定的套接字?

php - 通过 PHP 唯一且持续地识别移动设备