0

我基本上是在制作一个 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 或类似的东西。

任何帮助,将不胜感激

4

1 回答 1

0

您可以使用现有库执行命令行: http: //commons.apache.org/proper/commons-exec/tutorial.html

于 2013-11-12T10:08:56.677 回答