读取Java中的下一行InputStream

4

我有一个InputStream,它可以从文本文件中读取。我注意到这个输入流不会读取空白的下一行。

示例文本文件:

[This is

A test file

Here.]

代码如下:
while ((str = br.readLine())!= null) {
    System.out.println(str);
}

一些文本文件中可能有多个换行符。如何使输入流接受换行符?

从示例文本文件可以看出,'[This is'后面是一个空行,然后紧随其后的是'A test file'。如何读取两组字符串之间的空行?(这是我对换行符的定义)


“break line”是什么意思?您是否指仅包含\r\n或\n(取决于操作系统)的一行文本? - alpian
3
BufferedReader无法跳过空白行——我想知道你看到的两个空白行是否真的是CR LF(回车换行)造成的? - Michael Brewer-Davis
1
是的,我建议也使用 BufferedReader,我从来没有遇到过跳过空行的问题。 - keepitreall89
2
InputStream 没有 readLine() 方法。你能把所有的代码都贴出来吗?你期望在空行上读取什么? - Ishtar
同意@Ishtar的观点:InputStream处理字节而不是字符--因此不存在“行”的概念,因为没有字符的概念,也没有'\r'的概念。 - Liv
3个回答

3
你的意思是什么?
while ((str = br.readLine())!= null && str.trim().length()>0) {
    System.out.println(str);
}

这将为您提供所有非空行。

我不是非常确定,但我猜想这只会给出第一行,直到读取到一个空行。此外,它应该是!str.trim().isEmpty()。 - xmjx
如果你使用的是Java 6+,那么isEmpty()方法是可行的。 - Peter Lawrey

1

无论文件中的行是否为空,BufferedReader都将读取所有行。它会查找换行符:Windows上的LF + CR和GNU / Linux上的LF。根据BufferedReader文档:

一行被认为是以换行符('\n'),回车符('\r')或紧接着回车符后面跟随的换行符之一终止。

因此,这取决于您的文本文件实际上是什么样子。它的行之间是否真的有回车符和换行符,还是只是以这种方式显示?您可以通过在十六进制编辑器中查看文件来找出答案(LF为0x0A,CR为0x0D)。如果是这样,那么BufferedReader应该会给您提供这些空行。


0

抱歉犯了错误,应该是一个BufferedReader读入InputStream。BufferedReader确实读取了每一行,包括下一行/换行符/行尾符。问题出在我编写的算法上,它简单地跳过了下一行/换行符/行尾符。非常抱歉给你们带来了困扰和麻烦。

感谢所有的回答。


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