2016-10-22 2 views
-3

OS (특히 Windows)에 관한 정보를 수집하는 Java 용 API의 일부를 만들고 있습니다. 외부 JAR/API없이이 작업을 수행하려면 레지스트리를 읽어야합니다.Java 용 레지스트리 판독기가 아무 것도 반환하지 않는 이유는 무엇입니까?

코드 :

package main; 

import java.io.BufferedReader; 
import java.io.InputStreamReader; 

public class OperatingSystem 
{ 
    String edition; 
    String buildBranch; 
    String CurrentBuild; 
    String productName; 
    String release; 
    String productID; 
    String owner; 

    public static void main(String[] args) 
    { 
     OperatingSystem os = new OperatingSystem(); 
     os.getWindowsInfo(); 
     os.returnWindowsBuild(); 
     os.returnWindowsEdition(); 
     os.returnWindowsBranch(); 
     os.returnWindowsRelease(); 
     os.returnProductID(); 
     os.returnWindowsOwner(); 
    } 

    public String returnWindowsBuild() 
    { 
     return CurrentBuild; 
    } 
    public String returnWindowsEdition() 
    { 
     return edition; 
    } 
    public String returnWindowsBranch() 
    { 
     return buildBranch; 
    } 
    public String returnWindowsRelease() 
    { 
     return release; 
    } 
    public String returnProductID() 
    { 
     return productID; 
    } 
    public String returnWindowsOwner() 
    { 
     return owner; 
    } 

    public void getWindowsInfo() 
    { 
     edition = getRegistryValue("\"HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\"", "EditionID", "Windows version not detected"); 
     buildBranch = getRegistryValue("\"HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\"", "BuildBranch", "Windows build branch not detected"); 
     CurrentBuild = getRegistryValue("\"HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\"", "CurrentBuildNumber", "Windows build number not detected"); 
     productName = getRegistryValue("\"HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\"", "ProductName", "Windows product name not detected"); 
     release = getRegistryValue("\"HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\"", "ReleaseID", "Windows release not detected"); 
     productID = getRegistryValue("\"HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\"", "ProductID", "Windows product ID not detected"); 
     owner = getRegistryValue("\"HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\"", "RegisteredOwner", "Windows owner not detected"); 
    } 

    public String getRegistryValue(String query, String value, String Fail) 
    { 
     try { 
      ProcessBuilder builder = new ProcessBuilder(
        "cmd.exe", 
        "/c", 
        "REG QUERY " + query + " /v " + value 
      ); 
      Process p = builder.start(); // Query registry 
      BufferedReader r = new BufferedReader(new InputStreamReader(p.getInputStream())); 
      for(int i = 0; i < 2; ++i) // Reads line 2 for output 
       r.readLine(); 
      String result = r.readLine(); 
      return result; 
     } catch(Exception e) { 
      return Fail; // Returns the third argument in getRegistryValue, in case the operation fails 
     } 
    } 
} 

그러나, 나는 그것을 실행하면 아무것도 출력하지 않습니다. 어떻게 특정 레지스트리 키의 값을 출력 할 수 있습니까? (이 코드는 한순간에 효과가 있었지만 현재 작동하지 않는 이유는 확실하지 않습니다.)

+0

정확히 어디에서 출력해야할까요? 클래스가 사용되는 곳의 코드를 보여주세요. –

+0

주된 방법은 코드가 실행되는 곳입니다. –

+1

어디서 출력하고 있습니까? –

답변

0

콘솔에서 일부 출력을 찾고있는 경우 os.returnWindowsBuild();System.out.print()으로 바꾸어보십시오.

+0

그래서 어리 석다. L 어쨌든 간단한 실수로 나를 도와 줘서 고마워. –

+0

@evilarceus 당신은 환영합니다 – MiDaa

0

아무 것도 출력하지 않는 System.out.println 호출이 없습니다.

main 메서드를 업데이트하여 System.out.println 메서드를 사용하여 결과를 실제로 출력하고 (결과를 가져오고 결과를 삭제하는 대신) 결과를 실제로 출력하십시오. 즉 : System.out.println(os.returnWindowsBuild());

+0

os 객체를 만든 후 그의 첫 번째 호출은 getWindowsInfo()입니다. 하지만 생성자에 넣는 것이 낫습니다. –

+0

아 감사합니다. 휴대 전화에서이 모든 것을 읽으려고 시도하면서 그것을 놓친 것 :) – Krease

관련 문제