I added a couple new methods (addValue/deleteValue) to the example found here:
http://stackoverflow.com/questions/62289/read-write-to-windows-registry-using-java/1982033#1982033
/**
* @author Oleg Ryaboy, based on work by Miguel Enriquez
*/
public class WindowsReqistry
{
/**
*
* @param location
* path in the registry
* @param key
* registry key
* @return registry value or null if not found
*/
public static final String readRegistry(String location, String key)
{
try
{
// Run reg query, then read output with StreamReader (internal class)
Process process = Runtime.getRuntime().exec("reg query \"" + location + "\" /v \"" + key + "\"");
StreamReader reader = new StreamReader(process.getInputStream());
reader.start();
process.waitFor();
reader.join();
String output = reader.getResult();
// Output has the following format:
// \n<Version information>\n\n<key>\t<registry type>\t<value>
if (!output.contains("\t"))
{
return null;
}
// Parse out the value
String[] parsed = output.split("\t");
if(parsed.length > 0)
{
String result = parsed[parsed.length - 1].trim();
result = result.substring(1, result.length() - 1);
return result;
}
}
catch (Exception e)
{
}
return null;
}
static class StreamReader extends Thread
{
private InputStream is;
private StringWriter sw = new StringWriter();;
public StreamReader(InputStream is)
{
this.is = is;
}
public void run()
{
try
{
int c;
while ((c = is.read()) != -1)
sw.write(c);
}
catch (IOException e)
{
}
finally
{
try
{
is.close();
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
public String getResult()
{
return sw.toString();
}
}
public static boolean deleteValue(String key, String valueName)
{
try
{
// Run reg query, then read output with StreamReader (internal class)
Process process = Runtime.getRuntime().exec("reg delete \"" + key + "\" /v \"" + valueName + "\" /f");
StreamReader reader = new StreamReader(process.getInputStream());
reader.start();
process.waitFor();
reader.join();
String output = reader.getResult();
// Output has the following format:
// \n<Version information>\n\n<key>\t<registry type>\t<value>
return output.contains("The operation completed successfully");
}
catch (Exception e)
{
}
return false;
}
public static boolean addValue(String key, String valName, String val)
{
try
{
// Run reg query, then read output with StreamReader (internal class)
Process process = Runtime.getRuntime().exec(
"reg add \"" + key + "\" /v \"" + valName + "\" /d \"\\\"" + val + "\\\"\" /f");
StreamReader reader = new StreamReader(process.getInputStream());
reader.start();
process.waitFor();
reader.join();
String output = reader.getResult();
// Output has the following format:
// \n<Version information>\n\n<key>\t<registry type>\t<value>
return output.contains("The operation completed successfully");
}
catch (Exception e)
{
}
return false;
}
}