BufferedReader读取CMD processbuilder(JAVA)输出的问题?

时间:2019-05-06 18:40:18

标签: java cmd process bufferedreader processbuilder

在Java程序中使用ProcessBuilder,Process和BufferedReaders遇到一些问题。对于某些输入,该函数可以完美运行,但与其他输入相比,BufferedReader不会读取任何内容并返回空字符串。我不确定是什么原因导致了此错误。

我尝试调试,对于那些什么都没读的情况,BufferedReader完全跳过了循环。例如,当我以“ ipconfig”的形式传递命令时,该命令具有> 50行的CMD输出,它返回的每一行都与显示的完全相同。但是当我以'java -version'的形式传递命令时,它会完全跳过输出(应读取3行)。

ProcessBuilder /阅读功能:

public static String runCommandToStdOut(String command) throws InterruptedException, IOException {
        StringBuilder sBuilder = new StringBuilder();
        pBuilder = new ProcessBuilder();
        String[] processArray = command.split(" ");
        pBuilder.command(processArray);
        process = pBuilder.start();
        process.waitFor();
        BufferedReader bReader = new BufferedReader(new InputStreamReader(process.getInputStream()));
        //reading cmd output to string
        String line = "";
        while ((line = bReader.readLine()) != null) {
            sBuilder.append(line);
            sBuilder.append(System.getProperty("line.separator"));
        }
        return sBuilder.toString();
    }

我如何调用该函数:

try {
            String stdOut = osCommandService.runCommandToStdOut("java -version");
}

第二个代码节中的stdOut字符串为空。这意味着该函数运行后,“ sBuilder.toString”行为空字符串。当我直接在cmd提示符下运行“ java -version”时,看到的输出长3行,显然是无法正确读取。

0 个答案:

没有答案