2013-11-12 1 views
0

Я в основном создаю оболочку для развлечения, чтобы поиграть с отправкой и получением вещей в командной строке. Однако я столкнулся с проблемой. Вот код, у меня есть для моей командной строки:Отправка cmd и получение вывода с использованием java

public class CommandLine { 
    private Process cmdProcess; 
    private BufferedReader reader; 
    private BufferedWriter writer; 
    private StringBuffer bf; 
    private String ls = System.getProperty("line.separator"); 

public CommandLine() { 
} 

public void connect(){ 
    try{ 
     cmdProcess = Runtime.getRuntime().exec("cmd /b start"); 
     reader = new BufferedReader(new InputStreamReader(cmdProcess.getInputStream())); 
     writer = new BufferedWriter(new OutputStreamWriter(cmdProcess.getOutputStream())); 
     bf = new StringBuffer(); 
    } catch(Exception e){ } 
} 

public void sendCommand(String command){ 
    try { 
     writer.write(command + ls); 
     writer.flush(); 
    } catch(Exception e){ 
     e.printStackTrace(); 
    } 
} 

public void getContent(){ 
    String s; 
    while((s = readResponse()) != null){ 
     System.out.println(s); 
    } 
} 

public String readResponse(){ 
    try{ 
     return reader.readLine(); 
    } catch(Exception e){ 
     return null; 
    } 
} 

public void disconnect(){ 
    try{ 
     sendCommand("quit"); 
     reader.close(); 
     writer.close(); 
    } catch(Exception e){ 
     e.printStackTrace(); 
    } 
} 

public void reset(){ 
    try { 
     reader.reset(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 

}

Вот проблема, хотя. Когда я нахожусь в своем основном методе, и я делаю что-то вроде:

public static void main(String [] args){ 
    CommandLine cmd = new CommandLine(); 
    cmd.connect(); 
    cmd.sendCommand("dir"); 
    cmd.getContent(); 
    System.out.println("Here"); 
} 

«Здесь» никогда не печатается. Поэтому мне интересно, что я сделал неправильно. Также я хочу, чтобы иметь возможность отправить команду, а затем читать только ответ THAT. Я думал, может быть, я мог бы сделать это с помощью reset() для читателя, но я не уверен. Если бы это было недостаточно ясно, я имею в виду, что я не хочу, чтобы ответ просто добавлялся к StringBuffer или что-то в этом роде.

Любая помощь будет оценена

+3

Прочитайте ответ от запущенного процесса не закончат, как это не достигло EOF ... – MadProgrammer

+0

Есть способ сделать это, чтобы я мог читать ответы и заканчивать их? – ZWiki

+0

Создание командной оболочки намного сложнее, чем вы пытаетесь сделать. Лучше всего начать процесс и процесс cmd, включить команду (dir) и закончить процесс cmd, чтобы вы могли получить результат процесса. Вы сможете обрабатывать только одну команду за раз. –

ответ