如何解决如何使用Java读取注册表值? [重复]
| 这个问题已经在这里有了答案:解决方法
这显示了如何读取注册表,但可以扩展为写入操作:如何读取Windows注册表
import java.io.*;
public class RegQuery {
private static final String REGQUERY_UTIL = \"reg query \";
private static final String REGSTR_TOKEN = \"REG_SZ\";
private static final String REGDWORD_TOKEN = \"REG_DWORD\";
private static final String PERSONAL_FOLDER_CMD = REGQUERY_UTIL +
\"\\\"HKCU\\\\Software\\\\Microsoft\\\\Windows\\\\CurrentVersion\\\\\"
+ \"Explorer\\\\Shell Folders\\\" /v Personal\";
private static final String CPU_SPEED_CMD = REGQUERY_UTIL +
\"\\\"HKLM\\\\HARDWARE\\\\DESCRIPTION\\\\System\\\\CentralProcessor\\\\0\\\"\"
+ \" /v ~MHz\";
private static final String CPU_NAME_CMD = REGQUERY_UTIL +
\"\\\"HKLM\\\\HARDWARE\\\\DESCRIPTION\\\\System\\\\CentralProcessor\\\\0\\\"\"
+ \" /v ProcessorNameString\";
public static String getCurrentUserPersonalFolderPath() {
try {
Process process = Runtime.getRuntime().exec(PERSONAL_FOLDER_CMD);
StreamReader reader = new StreamReader(process.getInputStream());
reader.start();
process.waitFor();
reader.join();
String result = reader.getResult();
int p = result.indexOf(REGSTR_TOKEN);
if (p == -1)
return null;
return result.substring(p + REGSTR_TOKEN.length()).trim();
}
catch (Exception e) {
return null;
}
}
public static String getCPUSpeed() {
try {
Process process = Runtime.getRuntime().exec(CPU_SPEED_CMD);
StreamReader reader = new StreamReader(process.getInputStream());
reader.start();
process.waitFor();
reader.join();
String result = reader.getResult();
int p = result.indexOf(REGDWORD_TOKEN);
if (p == -1)
return null;
// CPU speed in Mhz (minus 1) in HEX notation,convert it to DEC
String temp = result.substring(p + REGDWORD_TOKEN.length()).trim();
return Integer.toString
((Integer.parseInt(temp.substring(\"0x\".length()),16) + 1));
}
catch (Exception e) {
return null;
}
}
public static String getCPUName() {
try {
Process process = Runtime.getRuntime().exec(CPU_NAME_CMD);
StreamReader reader = new StreamReader(process.getInputStream());
reader.start();
process.waitFor();
reader.join();
String result = reader.getResult();
int p = result.indexOf(REGSTR_TOKEN);
if (p == -1)
return null;
return result.substring(p + REGSTR_TOKEN.length()).trim();
}
catch (Exception e) {
return null;
}
}
static class StreamReader extends Thread {
private InputStream is;
private StringWriter sw;
StreamReader(InputStream is) {
this.is = is;
sw = new StringWriter();
}
public void run() {
try {
int c;
while ((c = is.read()) != -1)
sw.write(c);
}
catch (IOException e) { ; }
}
String getResult() {
return sw.toString();
}
}
public static void main(String s[]) {
System.out.println(\"Personal directory : \"
+ getCurrentUserPersonalFolderPath());
System.out.println(\"CPU Name : \" + getCPUName());
System.out.println(\"CPU Speed : \" + getCPUSpeed() + \" Mhz\");
}
}
, 有一个教程向您显示不使用Runtime.exec()
函数,而是专门使用java.util.prefs.WindowsPreferences
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。