我正在开发一个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
}
答案 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的内容?
编辑:对不起,它应该是评论,但还不能这样做:(