使用BufferedWriter从ArrayList输入多个stdin终端

时间:2015-02-19 01:11:48

标签: java

尝试获取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); 
}

2 个答案:

答案 0 :(得分:0)

不要关闭溪流。而是在写入输入流(stdin.flush())后刷新输入流。

答案 1 :(得分:0)

这里的修复是我简单地将for循环之外的所有内容添加到for循环的内部。我假设某人(非常)特别关注速度,这可能是一个潜在的问题方法,但我更关心这项工作 - 我不在乎,例如,如果一个大文件需要5-10分钟的时间由于不断丢弃和制作新物体而进行处理。

但是,我绝对希望听到更多人的意见。同样,我不能删除BufferedWriter上的.close()而不会导致程序挂起。