从命令行在控制台中逐行打印

时间:2014-05-16 04:23:54

标签: java

我需要在命令行中执行命令并在控制台上打印它。我是通过流程生成器完成的。 它是打印批量输出。(即)它等待整个命令完成执行并最终打印。但我想立即打印。在命令行上打印的每一行必须同时在控制台中打印。当我尝试调试我发现它是逐行打印的。

final BufferedReader m_stdOutput;
            final BufferedReader m_stdError;
            probuilder.directory(new File("C:\\sss"));
            Process m_process = null;
            try {
                        m_process = probuilder.start();
                    } catch (IOException e1) {
                        e1.printStackTrace();
                    }
                    m_stdOutput = new BufferedReader(new InputStreamReader(m_process.getInputStream()));
                    m_stdError = new BufferedReader(new InputStreamReader(m_process.getErrorStream()));

                    Thread m_outputThread = new Thread() {
                        public void run() {
                            String line;
                            try {
                                while ((line = m_stdOutput.readLine()) != null) {
                                System.out.println(line);
                                }} catch (IOException e) {
                                e.printStackTrace();
                            }
                        };
                    };
                    m_outputThread.start();
                    Thread m_errorThread = new Thread() {
                        public void run() {
                                String line1;

                            try {
                                while ((line1 =m_stdError.readLine()) != null) {
                                    System.out.println(line1);
                                }} catch (IOException e) {
                                e.printStackTrace();
                            }
                        };
                    };
                    m_errorThread.start();

1 个答案:

答案 0 :(得分:0)

ProcessBuilder有一个方法可以消除对I / O的单独线程的需要:

probuilder.directory(new File("C:\\sss"));
probuilder.inheritIO(); // Added
Process m_process = null;
try {
    m_process = probuilder.start();
} catch (IOException e1) {
    e1.printStackTrace();
}

inheritIO行使进程的IO流与Java程序的IO流相同,因此您不需要这些线程。如果让Java为您完成工作,它将正常工作。