缓冲读取器输出运行时exec命令

时间:2016-06-13 19:13:39

标签: java netbeans

创建此函数以输入unix命令并输出该unix命令的输出。但是,我使用的unix命令遇到了问题。 “ls”用于输出文件列表,但如果我执行“ls -lart”则输出null。无法进一步调试或为什么这不起作用。代码如下。

private String[] unixCommand (String command, Boolean boolOutput) throws IOException, InterruptedException{
    Process run;
    int i = 0;
    String output = "";
    String[] finalOutput = new String[1000];
    sendToProcessView("Unix Command: " + command);
    run = Runtime.getRuntime().exec(command);
    run.waitFor();
    sendToProcessView("In Unix Command");
    if (boolOutput == true){        
        sendToProcessView("In Output Mode of Unix Command");
        BufferedReader stdInput = new BufferedReader(new InputStreamReader(run.getInputStream()));
        sendToProcessView("Passed Buffer Reader");
        while ((output = stdInput.readLine()) != null) {
            sendToProcessView("Output: " + output);
            finalOutput[i] = output;
            i++;
        }
    }
    return finalOutput;
}

1 个答案:

答案 0 :(得分:1)

当与控制台交互时,你应该执行控制台本身,然后使用Process输入流来发送命令,例如(伪代码 - 我没有设置为从我的位置测试java代码,抱歉)

sendToProcessView("Unix Command: " + command);
run = Runtime.getRuntime().exec("bash");
PrintStream in = new PrintStream(run.getOutputStream());
in.println("ls -lart");

然后,您可以通过发送“退出”并按原样读取结果或使用线程监听器(如DataFetcher

来关闭进程。