我正在开发一个 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}在这种情况下,我知道有多个错误,所以我希望有多个输出,但正如您在照片中看到的那样,我只得到一个。
2 回答
慕娘9325324
TA贡献1783条经验 获得超4个赞
我认为这里的关键可能是 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))
看看你是否能得到更多的线路。
添加回答
举报
0/150
提交
取消