Java Runtime.getRuntime().exec重定向问题
我们使用以下代码合并具有相同标题和列的2个文件:Java Runtime.getRuntime().exec重定向问题,java,linux,file-io,Java,Linux,File Io,我们使用以下代码合并具有相同标题和列的2个文件: p = Runtime.getRuntime().exec(new String[]{"bash", "-c", "tail -n +2 " + file1 + " >> " + file2}); p.waitFor(); BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream()
p = Runtime.getRuntime().exec(new String[]{"bash", "-c", "tail -n +2 " + file1 + " >> " + file2});
p.waitFor();
BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line = "";
while ((line = reader.readLine())!= null) {}
然而,我们有一个奇怪的问题,合并后缺少一个文件内容,并且日志中没有任何异常或失败,我们每天有数百个这样的合并,代码以前从来没有出现过问题。文件大小在1-2G之间(我们有更大的文件,没有合并问题),运行时也没有空间问题
有人知道这是怎么发生的吗 1)缺少哪个文件内容
file1
或file2
?2) 这个错误是可再现的吗?3) 您如何处理while循环中的行?也许你可以摆脱外壳处理?4) 在这种情况下,waitFor()
的返回值是多少?5) 你已经做了什么来找到问题的根源?谢谢你的回复。以下是我的评论:1)仅制表符分隔的txt文件2)不可复制,在之前和在类似时间运行的其他提要中工作良好3)while循环中没有任何内容。4) 它没有检查waitFor()的返回值5)我们重新运行该过程,新文件看起来很好,我可以看到在重新运行期间创建并合并了两个文件,没有任何问题。现在,我将为waitFor()添加错误处理,当返回值不是0时,让代码引发异常。