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

Java 如何在执行命令时获取所有错误?,java,process,Java,Process,我正在开发一个java程序,在程序中的某个点,我需要执行一些命令,并显示该命令返回的所有错误。但我只能展示第一个 这是我的代码: 字符串[]comando={mql,“-c”,cmd}; 文件错误文件=新文件(“C:\\Users\\Administrator2\\Desktop\\errors.txt”); ProcessBuilder pb=新的ProcessBuilder(comando); pb.重定向错误(errorsFile); 进程p=pb.start(); p、 waitFor

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

这是我的代码:


字符串[]comando={mql,“-c”,cmd};
文件错误文件=新文件(“C:\\Users\\Administrator2\\Desktop\\errors.txt”);
ProcessBuilder pb=新的ProcessBuilder(comando);
pb.重定向错误(errorsFile);
进程p=pb.start();
p、 waitFor();
字符串r=errorsFile.getAbsolutePath();
路径ruta=Path.get(r);
Charset Charset=Charset.forName(“ISO-8859-1”);
List fileContents=Files.readAllLines(ruta,charset);
如果(fileContents.size()>0){
int cont=1;
for(字符串str:fileContents){
系统输出打印项次(“错误”+cont);
System.out.println(“\t”+str);
cont++;
}
}
否则{
//其他代码
}
在这种情况下,我知道有不止一个错误,所以我希望有不止一个输出,但正如你在照片中看到的,我只得到一个。
您是否调试并检查了fileContents的内容


编辑:抱歉,它应该是一个注释,但还不能这样做:(

我认为这里的关键可能是ProcessBuilder的
重定向错误(文件文件)
实际上是
重定向错误(重定向.to(文件))

来自Oracle的ProcessBuilder类文档:

这是一种方便的方法。对表单redirectError(文件)的调用与调用redirectError(Redirect.to(文件))的行为完全相同

我看到的大多数示例都使用
重定向.appendTo(文件)
而不是
重定向.to(文件)
。文档可能会解释原因

来自Oracle的ProcessBuilder.Redirect文档:

publicstaticprocessbuilder.重定向到(文件)
返回要写入指定文件的重定向。如果子进程启动时指定文件存在,则其以前的内容将被丢弃

publicstaticprocessbuilder.重定向appendTo(文件)
返回要附加到指定文件的重定向。每个写入操作首先将位置前进到文件末尾,然后写入请求的数据

我会试着换一个

pb.redirectError(errorsFile) 


然后看看是否有更多这样的行。

那么…可能只抛出了一个错误?在这种情况下,我知道抛出了不止一个错误。是的,我检查了它,在文件中只抛出了最后一个错误。因此,您实际上是说该文件只有一个错误(如果我理解正确,则抛出最后一个错误)。如果是这种情况,那么这实际上可能是命令“mql”及其处理错误的方式存在问题。是否确实所有错误区域都已重定向到错误输出?请尝试将输出(redirectOutput方法)重定向到另一个文件,并检查该文件中是否列出了错误。
pb.redirectError(Redirect.appendTo(errorsFile))