将流转换为字符串:将多个文件合并为一个字符串

3

我有两个文本文件,想将它们作为流获取并转换为字符串。最终,我希望这两个不同的文件合并成一个。

到目前为止,我已经得到:

     //get the input stream of the files. 

    InputStream is =
            cts.getClass().getResourceAsStream("/files/myfile.txt");


     // convert the stream to string

    System.out.println(cts.convertStreamToString(is));

getResourceAsStream不接受多个字符串作为参数。那我需要怎么做呢?分别转换它们然后合并吗?

有没有人可以向我展示一个简单的方法来做到这一点?


2
字符串拼接是Java的基本功能之一。String merged = string1 + string2 - Johan Sjöberg
谢谢@johan。我需要为每个文件单独使用一个InputStream吗? - LuxuryMode
4个回答

6

看起来你想要连接流。你可以使用SequenceInputStream来从多个流创建单个流,然后从这个单个流中读取数据并按需要使用它。

这是一个例子:

String encoding = "UTF-8"; /* You need to know the right character encoding. */
InputStream s1 = ..., s2 = ..., s3 = ...;
Enumeration<InputStream> streams = 
  Collections.enumeration(Arrays.asList(s1, s2, s3));
Reader r = new InputStreamReader(new SequenceInputStream(streams), encoding);
char[] buf = new char[2048];
StringBuilder str = new StringBuilder();
while (true) {
  int n = r.read(buf);
  if (n < 0)
    break;
  str.append(buf, 0, n);
}
r.close();
String contents = str.toString();

另外,由于某种原因,SequenceInputStream 不允许我添加超过 2 个流。它只能最多接受两个流吗?实际上我需要三个。 - LuxuryMode
1
@LuxuryMode - 你可以做超过2个,但是你必须创建一个“枚举”。我会更新我的示例。 - erickson
@Erickson,你最后一行代码是否将其转换为字符串?我正在尝试弄清楚如何打印完整的字符串... - LuxuryMode
1
@Ali - 这不会造成冲突,但也没有帮助,因为我们已经在 char[] 中进行了批量读取。 - erickson
@LuxuryMode - 确保您的文件以新行结尾?如果您测试每个文件的内容并且它确实以新行结尾,那么您最终会得到一个空行吗?如果无法更正文件内容,则最简单的方法可能是摆脱SequenceInputStream,并在循环中读取每个文件,在每个文件的末尾添加一个新行。 - erickson
显示剩余6条评论

2

0

就我个人而言,我能想到几种方法:

一种是创建一个 StringBuilder,然后将每个流转换为字符串并追加到 StringBuilder 中。

另一种是创建一个可写的内存流,并将每个输入流传输到该内存流中,然后将其转换为字符串。


0
创建一个循环,对于每个文件将文本加载到 StringBuilder 中。然后在每个文件的数据被追加后,在构建器上调用 toString()。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接