SequenceInputStream中每个新流的新行

时间:2017-07-21 14:38:11

标签: java inputstream java-io

我有两个文件,test-1.text(内容为Data from test-1)和test-2.text(内容为Data from test-2)。
当我使用SequenceInputStream时要从两个流中读取,输出可以像Data from test-1Data from test-2一样直线输出,也可以每个字符都在新行上。
如何从新行开始打印第二个流中的内容?

public class SequenceIStream {

public static void main(String[] args) throws IOException {
    FileInputStream fi1 = new FileInputStream("resources/test-1.text");
    FileInputStream fi2 = new FileInputStream("resources/test-2.text");

    SequenceInputStream seq = new SequenceInputStream(fi1, fi2);

    int i= 0;

    while((i = seq.read())!=-1)
        System.out.print((char)i);
}

}

输出为
Data from test-1Data from test-2

期望的输出
Data from test-1
Data from test-2

2 个答案:

答案 0 :(得分:4)

我将此回复基于this helpful SO answer,它提供了一种从流集合中创建SequenceInputStream的方法。这里的基本思想是你已经有两个流可以提供你想要的输出。您只需要换行符,更具体地说是 stream ,它会生成换行符。我们可以简单地从换行符的字节创建一个ByteArrayInputStream,然后将它夹在你已经拥有的文件流之间。

FileInputStream fi1 = new FileInputStream("resources/test-1.text");
FileInputStream fi2 = new FileInputStream("resources/test-2.text");

String newLine = "\n";
List<InputStream> streams = Arrays.asList(
    fi1,
    new ByteArrayInputStream(newLine.getBytes()),
    fi2);
InputStream seq = new SequenceInputStream(Collections.enumeration(streams));

int i= 0;

while((i = seq.read())!=-1)
    System.out.print((char)i);

答案 1 :(得分:1)

SequenceInputStream不支持此选项。修复此问题的唯一方法是在文件test-1.text的内容中添加换行符(&#39; \ n&#39;)(内容:Data from test-1\n