1

我需要读取一组 xml 和属性文件并解析数据。目前我正在使用 inputstream ans string builder 来执行此操作。但这不会以与输入文件相同的方式创建文件。我不想删除空格和新行。我如何做到这一点。

is = test.getInputStream();
br = new BufferedReader(new InputStreamReader(is));
String line5;
StringBuilder sb5 = new StringBuilder();
while ((line5 = br.readLine()) != null) {
    sb5.append(line5);
} 
String s = sb5.toString();

我的输出是:

#test 123 #test2 345

预期输出为:

#test
123
#test2
345

有什么想法吗 ?谢谢

4

3 回答 3

3

br.readLine() 消耗换行符,您需要在附加行后将它们添加到您的 StringBuilder 中。

is = test.getInputStream();
br = new BufferedReader(new InputStreamReader(is));
String line5;
StringBuilder sb5 = new StringBuilder();
while ((line5 = br.readLine()) != null) {
    sb5.append(line5);
    sb5.append("\n");
}

如果您想要一个非常简单的将文件读取到字符串的解决方案,Apache Commons-IO有一种执行此类任务的方法(org.apache.commons.io.FileUtils)。

FileUtils.readFileToString(File file, String encoding);
于 2012-07-23T18:28:10.873 回答
1

readLine()方法不添加 EOL 字符 (\n)。因此,在将字符串附加到构建器时,您需要添加 EOL 字符,例如sb5.append(line5+"\n");

于 2012-07-23T18:28:14.460 回答
1

各种readLine方法从输入中丢弃换行符。

BufferedReader文档

返回: 包含行内容的字符串,不包括任何行终止字符,如果已到达流的末尾,则返回 null

一个解决方案可能很简单,就像StringBuilder为每个readLine:添加一个换行符一样简单sb5.append(line5 + "\n");

更好的选择是首先使用该方法读取中间缓冲区,并read提供您自己的char[]. 你仍然可以使用StringBuilder.append,并且得到一个与文件内容匹配的字符串。

于 2012-07-23T18:28:31.273 回答