我可以去窗户regedit,然后去编辑 – >find并键入我想在我的电脑(在我的情况下,最大值)find的密钥,并find所需的密钥(的最大值)(在我的情况下,它是在“HKEY_LOCAL_MACHINE \ SOFTWARE \ Wow6432Node \ Microsoft \ Windows \ CurrentVersion \ Uninstall \ Maxima-5.17.1_is1“),但我需要在java中dynamic地执行此操作,并在Windows中查找当前安装的maxima版本及其目录位置。 我不知道如何进行。
我试图使用这里陈述的方法: 读/写使用Java的Windowsregistry ,但要使用这些方法,我需要知道的关键。 如何在Java中dynamic地find密钥? 或者有没有其他的方法来find在Windows中使用Java的软件的版本和目录位置?
我将用这个类来解答你的答案。 因为它是用纯java代码编写的。
WinRegistry
类。 以下是帮助您的代码:
List<String> ls = WinRegistry.readStringSubKeys(WinRegistry.HKEY_LOCAL_MACHINE, "SOFTWARE\\Wow6432Node\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\"); String key = ls.stream().filter(st -> st.matches("Maxima.*")).findAny().get();
现在这个key
是Maxima-5.17.1_is1
(如果存在的话,否则java.util.NoSuchElementException
将被抛出)。 你可以用它来获得任何价值 。
我会避免强制访问私有方法,因为:
如果您使用reg.exe ,那么您的代码可以保证在所有版本的Java中都能正常工作,至少只要Microsoft在Windows中包含reg.exe即可:
ProcessBuilder builder = new ProcessBuilder("reg", "query", "HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\Microsoft\\Windows\\CurrentVersion\\Uninstall"); Process reg = builder.start(); try (BufferedReader output = new BufferedReader( new InputStreamReader(reg.getInputStream()))) { Stream<String> keys = output.lines().filter(l -> !l.isEmpty()); Stream<String> matches = keys.filter(l -> l.contains("\\Maxima")); Optional<String> key = matches.findFirst(); // Use key ... } reg.waitFor();