Я в основном создаю оболочку для развлечения, чтобы поиграть с отправкой и получением вещей в командной строке. Однако я столкнулся с проблемой. Вот код, у меня есть для моей командной строки:Отправка 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 или что-то в этом роде.
Любая помощь будет оценена
Прочитайте ответ от запущенного процесса не закончат, как это не достигло EOF ... – MadProgrammer
Есть способ сделать это, чтобы я мог читать ответы и заканчивать их? – ZWiki
Создание командной оболочки намного сложнее, чем вы пытаетесь сделать. Лучше всего начать процесс и процесс cmd, включить команду (dir) и закончить процесс cmd, чтобы вы могли получить результат процесса. Вы сможете обрабатывать только одну команду за раз. –