我基本上是在制作一个 shell 来玩玩向命令提示符发送和接收东西。不过,我遇到了一些问题。这是我的命令行代码:
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");
}
“这里”永远不会被打印出来。所以我很好奇我做错了什么。另外我希望能够发送一个命令,然后只读取那个响应。我在想也许我可以在阅读器上使用 reset() 来做到这一点,但我不确定。如果这还不够清楚,我的意思是我不希望将响应仅附加到 StringBuffer 或类似的东西。
任何帮助,将不胜感激