Java/Tip & Tech2009. 12. 11. 14:08

1편에 이어서 계속되는 Java로 Windows Registry 정보 가져오기입니다.

2009/12/11 - [Java/Tip & Tech] - [Java]Java로 Windows Registry 정보를 가져오기...1편


java.util.prefs.Prefrences 클래스로는 일단 아무 것도 못해 잡수시겠다는 판단을 내리고

다른 방법을 찾던 중 Windows의 "reg query" 명령어를 이용한 방법을 알게되었습니다.

간단하게 설명하자면 Windows의 "reg query"명령어를 실행한 다음에

그 결과를 InputStream으로 받아서 필요한 내용을 끄집어 내는 방법입니다.

먼저 "regedit" 명령어로 레지스트리 편집창을 열어서 (범행???)대상을 골랐습니다.



OK... 그러다가 현재 설치된 알집의 버전 정보를 가지고 와보기로 하였습니다.

Node : HKEY_CURRENT_USER\Software\ESTsoft\ALZip
Key : Version
Value : 7.52


인터넷에서 봤었던 예제 소스에서 필요한 것만 빼고 바꿀껀 싹 빠꿔서 아래와 같은 예제 소스가 나왔습니다.


import java.io.BufferedInputStream;
import java.io.IOException;

public class TestGetRegInfoByRegQuery {
	private static final String CMD_REG_QUERY = "reg query ";
	private static final String TOKEN_REGSTR = "REG_SZ";
	private static final String TOKEN_REGDWORD = "REG_DWORD";

	public static String getRegistryValue(String node, String key) {
		BufferedInputStream in = null;
		String regData = null;

		try {
			String strCmd = CMD_REG_QUERY + "\"" + node + "\" /v " + key;
			//System.out.println(strCmd);
			
			Process process = Runtime.getRuntime().exec(strCmd);
			in = new BufferedInputStream(process.getInputStream());
			
			// Data가 들어오는 동안 0.2초정도 대기
			try {
				Thread.sleep(200);
			} catch (InterruptedException ie) {
				ie.printStackTrace();
			}

			byte[] buff = new byte[in.available()];
			in.read(buff);
			
			regData = new String(buff);
		} catch (IOException ioe) {
			ioe.printStackTrace();
		} finally {
			try { in.close(); } catch (IOException ioe) {}
		}

		int index = regData.indexOf(TOKEN_REGSTR);
		if (index < 0)
			return null;

		return regData.substring(index + TOKEN_REGSTR.length()).trim();
	}

	public static void main(String[] args) {
		System.out.println(getRegistryValue("HKEY_CURRENT_USER\\Software\\ESTsoft\\ALZip", "Version"));
	}
}



실행한 결과는 아래와 같이 나오는군요.

7.52


사실 Runtime.getRuntime().exec(String command); 메소드를 이용하는 방법이라

그다지 기분이 좋지 않고, 찜찜한 구석이 있기는 하지만

일단 과정보다도 쪼금 더 중요한 결과가 잘 나오는지라 이 방법을 사용하기로 하였습니다.

아마도 조만간 Windows의 "reg query" 명령어의 옵션을 정리해서 올리고 있을 것 같네요~~^^;

Posted by Huikyun