2014-09-01 2 views
2

나는 cmd 또는 터미널을 통해 하드 디스크의 시리얼을 얻을 자바 프로그램을 만들려고합니다. 나는 두 OS (Windows, Linux) 모두에서이를 시도하고있다. Linux에서 문제가 발생했습니다. 공백을 반환합니다. 터미널에 hdparm -I /dev/sda | grep Serial을 입력하면 하드 드라이브의 일련 번호가 표시됩니다.java 하드 디스크 직렬을 얻으십시오

질문 일련 번호를 얻거나 표시하려면 어떻게해야합니까?

private static String OS= System.getProperty("os.name").toLowerCase(); 
    private static String system; 
    private static String serial; 
    private void getVol(String drive) 
    { 
     String query=new String(); 
     if(isWindows()) 
     { 
      query="cmd /c"+" vol "+drive+":"; 
     } 
     else if(isUnix()) 
     { 
      query="hdparm -I /dev/sda | grep Serial"; 
     } 
     try 
     { 
      Runtime rt=Runtime.getRuntime(); 
      InputStream is=rt.exec(query).getInputStream(); 
      InputStreamReader isr=new InputStreamReader(is); 
      BufferedReader br=new BufferedReader(isr); 
      String line; 
      if(isWindows()) 
      { 
       br.readLine(); 
       line=br.readLine(); 
       line=line.substring(line.lastIndexOf(" ")+1); 
       serial=line; 
      } 
      else if(isUnix()) 
      { 
       line=br.readLine(); 
       serial=line; 
      } 
     }catch(IOException ex) 
     { 
      ex.printStackTrace(); 
     } 
    } 

    private static boolean isWindows() { 
     return (OS.indexOf("win") >= 0); 
    } 
    private static boolean isUnix() 
    { 
     return (OS.indexOf("nux") >= 0); 
    } 

    public static void main(String args[]) 
    { 
     MainClass f=new MainClass(); 
     f.getVol("C"); 
     System.out.println(serial); 
    } 
+0

. getProperty ("os.name"). toLowerCase();'? –

+0

윈도우에서 윈도우 8.1을 반환하고 centOS (리눅스)에서 리눅스를 반환 – askManiac

+0

리눅스 OS에서, 나는 의미했다. 그게 당신에게 문제가되는 거 맞죠? –

답변

0

귀하의 문제가 거의 확실하다 실행 hdparm 루트 권한이 필요합니다

여기 내 코드입니다. 일반 사용자는 실행할 수 없습니다.

또한 Windows에서 읽고있는 "일련 번호"는 기본 파일 시스템의 볼륨 일련 번호이며, 은 아니며 하드 드라이브는입니다. 다소 쉽게 변경할 수 있습니다 (예 : VolumeID 사용).

+0

글쎄, 현재 루트 권한으로 실행 중이지만 아직 작동하지 않습니다 ... – askManiac

+0

루트가 아닌 루트로 실행하는 방법은 http://stackoverflow.com/questions/7619483/getting-hdd-serial- on-linux-without-root-permissions – Raedwald

0

게시 된 이후로 시간이 지났지 만 @giusc 솔루션이 저에게 적합하지 않아 다른 사람들을 위해 내 연구를 게시했습니다.

리눅스에서 하드 디스크 드라이브 일련 번호를 가져옵니다 :

public static void main(String[] args) throws Exception { 

    String sc = "/sbin/udevadm info --query=property --name=sda"; // get HDD parameters as non root user 
    String[] scargs = {"/bin/sh", "-c", sc}; 

    Process p = Runtime.getRuntime().exec(scargs); 
    p.waitFor(); 

    BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream())); 
    String line; 
    StringBuilder sb = new StringBuilder(); 

    while ((line = reader.readLine()) != null) { 
     if (line.indexOf("ID_SERIAL_SHORT") != -1) { // look for ID_SERIAL_SHORT or ID_SERIAL 
      sb.append(line); 
     }  
    } 

    System.out.println("HDD Serial number:" + sb.toString().substring(sb.toString().indexOf("=") + 1)); 
} 

하드 디스크 드라이브 일련 번호 (제조) 윈도우를 받기 : 당신이 시스템`에서받을 수 있나요 어떤 가치

public static void main(String[] args) { 
    String sc = "cmd /c" + "wmic diskdrive get serialnumber"; 

    Process p = Runtime.getRuntime().exec(sc); 
    p.waitFor(); 

    BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream())); 

    String line; 
    StringBuilder sb = new StringBuilder(); 

    while ((line = reader.readLine()) != null) { 
     sb.append(line); 
    } 

    System.out.println("HDD Serial number: " + sb.substring(sb.toString().lastIndexOf("r") + 1).trim()); 
} 
관련 문제