尝试获取ArrayList并将其所有字符串输入到命令行程序中,然后获取输出。在流关闭之前我只能进行一次循环,我不能再使用它们了(java IOException Stream Closed)。我必须关闭流,否则我无法从程序中获取来自ArrayList的给定输入的输出。有没有办法解决这个问题?
ProcessBuilder pb = new ProcessBuilder(cmd);
Process p = pb.start();
BufferedReader stdout = new BufferedReader( new InputStreamReader(p.getInputStream()) );
BufferedWriter stdin = new BufferedWriter( new OutputStreamWriter(p.getOutputStream()) );
for(String sequence : editedSequences){
stdout.write(sequence);
stdout.close();
String line = "";
line = stdin.readLine();
while ((line = stdin.readLine()) != null) {
structure += line;
}
stdin.close();
System.out.println("seq: " + sequence);
System.out.println("struc: " + structure);
structure = structure.substring(0, sequence.length());
System.out.println("struc: " + structure);
sequenceStructurePair = new String[]{sequence, structure};
sequenceStructurePairs.add(sequenceStructurePair);
}
答案 0 :(得分:0)
不要关闭溪流。而是在写入输入流(stdin.flush()
)后刷新输入流。
答案 1 :(得分:0)
这里的修复是我简单地将for循环之外的所有内容添加到for循环的内部。我假设某人(非常)特别关注速度,这可能是一个潜在的问题方法,但我更关心这项工作 - 我不在乎,例如,如果一个大文件需要5-10分钟的时间由于不断丢弃和制作新物体而进行处理。
但是,我绝对希望听到更多人的意见。同样,我不能删除BufferedWriter上的.close()而不会导致程序挂起。