执行命令时如何获取所有错误?

我正在开发一个 java 程序,在程序的某个时刻我需要执行一些命令并显示该命令返回的所有错误。但我只能展示第一个。


这是我的代码:



String[] comando = {mql,"-c",cmd};


File errorsFile = new File("C:\\Users\\Administrator2\\Desktop\\errors.txt");


ProcessBuilder pb = new ProcessBuilder(comando);

pb.redirectError(errorsFile);


Process p = pb.start();

p.waitFor();


String r = errorsFile.getAbsolutePath();


Path ruta = Paths.get(r);

Charset charset = Charset.forName("ISO-8859-1");


List<String> fileContents = Files.readAllLines(ruta,charset);


if (fileContents.size()>0){

      int cont = 1;

      for(String str : fileContents){


              System.out.println("Error"+cont);

              System.out.println("\t"+str);

              cont++;

      }

}

else{

     //other code

}


在这种情况下,我知道有多个错误,所以我希望有多个输出,但正如您在照片中看到的那样,我只得到一个。

http://img3.mukewang.com/63622d5f0001e94604980053.jpg

守着星空守着你
浏览 75回答 2
2回答

慕娘9325324

我认为这里的关键可能是 ProcessBuilder 的redirectError(File file)实际上是redirectError (Redirect.to(file)).来自 Oracle 的 ProcessBuilder 类文档:这是一种方便的方法。调用redirectError(file) 形式的行为与调用redirectError (Redirect.to(file)) 完全相同。我见过的大多数例子都是使用Redirect.appendTo(File file)而不是Redirect.to(file).&nbsp;文档可能会解释原因。来自 Oracle 的 ProcessBuilder.Redirect 文档:public static ProcessBuilder.Redirect to(File file)&nbsp;返回重定向以写入指定文件。如果子进程启动时指定的文件存在,则其之前的内容将被丢弃。public static ProcessBuilder.Redirect appendTo(File file)&nbsp;返回重定向以附加到指定文件。每个写操作首先将位置推进到文件末尾,然后写入请求的数据。我会尝试更换pb.redirectError(errorsFile)和pb.redirectError(Redirect.appendTo(errorsFile))看看你是否能得到更多的线路。

翻过高山走不出你

您是否调试并检查了 fileContents 的内容?编辑:对不起,它应该是一个评论,但还不能这样做:(
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java