2016-10-23 9 views
2

У меня есть приложение Java, которое выполняет команду с использованием Runtime.getRuntime.exec("command"); Затем он генерирует файл, который мне нужно прочитать, чтобы найти строку, все в порядке до сих пор.Приложение Java не читает из файла при выполнении команды с Runtime.getRuntime()

Проблема заключается в том, что программа не может найти заданную строку после выполнения этой команды, но если я закомментирую строку 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#waitForProcess, который возвращает Runtime#exec. Кроме того, рекомендуется проверить, был ли процесс успешным. Посмотрите на Javadoc of Process для получения дополнительной информации.

+0

Это было быстро! Nice one mm759 Я только что сохранил процесс и добавил .waitfor(); это сработало. Вы сделали свой день, ура! ;) – Tofetopo