Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中获取Cmd输出_Java_Batch File_Cmd - Fatal编程技术网

在Java中获取Cmd输出

在Java中获取Cmd输出,java,batch-file,cmd,Java,Batch File,Cmd,我在尝试将cmd输出重定向到Java变量时遇到问题 我的消息来源: System.out.println("Init WAR packaging"); ProcessBuilder builder = new ProcessBuilder(Arrays.asList(new String[] {"cmd.exe", "/C", "start", "/wait", "new.bat"})); Process process = builder.start(); BufferedReader rea

我在尝试将cmd输出重定向到Java变量时遇到问题

我的消息来源:

System.out.println("Init WAR packaging");
ProcessBuilder builder = new ProcessBuilder(Arrays.asList(new String[] {"cmd.exe", "/C", "start", "/wait", "new.bat"}));
Process process = builder.start();
BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
StringBuilder strBuilder = new StringBuilder();
String line = null;
while (process.isAlive()) {
    if((line = reader.readLine()) != null) {
        strBuilder.append(line);
        strBuilder.append(System.getProperty("line.separator"));
    } else {
        System.out.println("123");
        Thread.sleep(10);
    }
}
String result = strBuilder.toString();
System.out.println(result);
System.out.println("Start WAR packaging");
该批次主要包括:

jar -cvf test.war *.jsp *.xml
我在控制台中获得的输出:

Init WAR packaging
123

Start WAR packaging
因此,我从CMD中得到的所有输出都是null。实际的CMD输出如下所示:

asdf.jsp wird hinzugefügt(ein = 17270) (aus = 4693)(72 % verkleinert)
qwer.jsp wird hinzugefügt(ein = 12969) (aus = 3519)(72 % verkleinert)
yxcv.jsp wird hinzugefügt(ein = 22463) (aus = 5375)(76 % verkleinert)
rewq.jsp wird hinzugefügt(ein = 30687) (aus = 6748)(78 % verkleinert)
jhgf.jsp wird hinzugefügt(ein = 47974) (aus = 11005)(77 % verkleinert)
我想这实际上就是它的样子

真的非常感谢任何帮助,因为我无法处理在google/其他stackoverflow问题上找到的信息

谢谢你,祝你度过愉快的一天:

编辑:

我按照arataj的建议修改了整个代码,希望我能正确理解你:

ProcessBuilder builder = new ProcessBuilder(Arrays.asList(new String[] {"cmd.exe", "/C", "start", "/wait", "new.bat"}));
        Process process = builder.start();
        BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
        StringBuilder strBuilder = new StringBuilder();
        String line = null;
        while (process.isAlive()) {
            Thread.sleep(10);
            line = reader.readLine();
            strBuilder.append(line);
            strBuilder.append(System.getProperty("line.separator"));
        }
        line = reader.readLine();
        strBuilder.append(line);
        String result = strBuilder.toString();
        System.out.println(result);
控制台输出:

Init WAR packaging
null
null
Start WAR packaging

解决了这个问题,问题是我无法访问我想要的输出,因为它是由一个命令调用另一个comman引起的

我用代码解决它的方法:

ProcessBuilder builder = new ProcessBuilder("cmd.exe");
Process  process = builder.start();
BufferedWriter out = new BufferedWriter(new 
OutputStreamWriter(process.getOutputStream()));
InputStream stdout = process.getInputStream();

BufferedReader reader = new BufferedReader(new InputStreamReader(stdout));

out.write("start /b new.bat\n");
out.flush();
out.close();

Scanner scanner = new Scanner(stdout);
while (scanner.hasNextLine()) {
    System.out.println(scanner.nextLine());
}
System.out.println("end");
scanner.close();
基于


谢谢你的帮助

我不明白为什么有人会否决这个