2016-10-23 56 views
2

我有一個Java應用程序執行使用Runtime.getRuntime.exec("command");命令然後生成一個文件,我需要閱讀找到一個字符串,就一切OK爲止。Java應用程序無法從文件讀取()

問題是程序在執行命令後找不到給定的字符串,但是如果我在第一次運行應用程序並進一步運行並創建文件後註釋掉了行Runtime.getRuntime.exec("command");,它會找到字符串正常。看起來像getRuntime()由於某種原因正在停止工作fileReader。任何人都知道這個解決方案?

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

    String[] command = new String[3]; 
    command[0] = "cmd.exe"; 
    command[1] = "/c"; 
    command[2] = "C:\\Users\\kjdah\\Desktop\\handle.exe -a > C:\\Users\\kjdah\\Desktop\\handles.txt"; 

    Runtime.getRuntime().exec(command); 

    String toFind = "##?#USB#VID_04F2&PID_B2E1&MI_00#6&9f9977c&0&0000#"; 
    File file = new File("C:\\Users\\kjdah\\Desktop\\handles.txt"); 

    boolean found = false; 
    String strLinePid = null; 

    try { 
     FileReader fstream = new FileReader(file); 
     BufferedReader buffer = new BufferedReader(fstream); 
     String strLine; 

     while ((strLine = buffer.readLine()) != null) { 

      if(strLine.contains("pid:")){ 
       strLinePid = strLine; 
      } 

      if(strLine.contains(toFind)){ 
       found = true; 
       break; 
      } 
     } 

     buffer.close(); 
     fstream.close(); 

    } 
    catch (Exception e){ 
     System.err.println("An error happened: " + e.getMessage()); 
     e.printStackTrace(); 
    } 

`

回答

2

Runtime#exec創建同時運行一個新的進程。你必須等待它完成處理結果。

這可以使用的方法Process#waitForRuntime#exec返回。此外,檢查過程是否成功是一個好主意。看看Javadoc of Process瞭解更多信息。

+0

太快了!不錯的一個mm759我剛剛保存了進程並添加了.waitfor();有效。你做了我的一天,歡呼! ;) – Tofetopo

相關問題