为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

守着星空守着你 2022-11-02 16:41:45
我正在开发一个 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))

看看你是否能得到更多的线路。


查看完整回答
反对 回复 2022-11-02
?
翻过高山走不出你

TA贡献1875条经验 获得超3个赞

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

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


查看完整回答
反对 回复 2022-11-02
  • 2 回答
  • 0 关注
  • 74 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信