Java BufferedReader 在循环之前检查循环的下一行
我正在解析 .cvs 文件。 对于 cvs 的每一行,我使用解析的值创建一个对象,并将它们放入一个集合中。
在将对象放入地图并循环到下一个之前,我需要检查下一个 cvs 行是否与实际对象相同,但特定属性值不同。
为此,我需要检查缓冲区的下一行,但将循环缓冲区保持在同一位置。
例如:
BufferedReader input = new BufferedReader(new InputStreamReader(new FileInputStream(file),"ISO-8859-1"));
String line = null;
while ((line = input.readLine()) != null) {
do something
while ((nextline = input.readLine()) != null) { //now I have to check the next lines
//I do something with the next lines. and then break.
}
do something else and continue the first loop.
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您可以使用
BufferedReader.mark(int)
。要返回到调用 BufferedReader.reset() 的位置。mark
的参数是“预读限制”;如果您在读取超过限制后尝试reset()
,您可能会收到 IOException。或者您可以使用
RandomAccessFile
改为:
或者您可以使用
PushbackReader
允许您取消读取
个字符。但有一个缺点:PushbackReader
不提供readLine
方法。You can mark the current position using
BufferedReader.mark(int)
. To return to the position you callBufferedReader.reset()
. The parameter tomark
is the "read ahead limit"; if you try toreset()
after reading more than the limit you may get an IOException.Or you could use
RandomAccessFile
instead:Or you could use
PushbackReader
which allows you tounread
characters. But there's the drawback:PushbackReader
does not provide areadLine
method.您还可以使用嵌套的 do...while 循环来执行此操作,而无需重新读取流中的任何内容:
关键是只读取每个文件并将其作为内部循环中的子行处理,或者将parentLine 设置为新读取的值并继续外循环。
You can also do this with nested do…while loops, without re-reading anything from your stream:
The key is to just read each file and either process it as a child line in the inner loop, or set the parentLine to the newly read value and continue the outer loop.