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

时间:2019-05-02 07:38:25

标签: java process

我正在开发一个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
}

在这种情况下,我知道有多个错误,因此我希望有多个输出,但是如您在照片中所见,我只有一个。 enter image description here

2 个答案:

答案 0 :(得分:2)

我认为这里的关键可能是ProcessBuilder的redirectError(File file)实际上是redirectError (Redirect.to(file))

来自Oracle的ProcessBuilder类文档:

  

这是一种方便的方法。形式redirectError(file)的调用与调用redirectError(Redirect.to(file))的行为完全相同。

我看到的大多数示例都使用Redirect.appendTo(File file)而不是Redirect.to(file)。该文档可能会解释原因。

来自Oracle的ProcessBuilder.Redirect文档:

  

public static ProcessBuilder.Redirect to(File file)   返回重定向以写入指定的文件。如果子进程启动时指定的文件存在,则其先前的内容将被丢弃。

     

public static ProcessBuilder.Redirect appendTo(File file)   返回重定向以追加到指定文件。每个写入操作首先将位置前进到文件末尾,然后写入请求的数据。

我会尝试替换

pb.redirectError(errorsFile) 

pb.redirectError(Redirect.appendTo(errorsFile))

看看您是否以这种方式获得更多的行。

答案 1 :(得分:1)

您是否调试并检查了FileContents的内容?

编辑:对不起,它应该是评论,但还不能这样做:(