我正在解析一个 .cvs 文件。 对于 cvs 的每一行,我创建一个包含解析值的对象,并将它们放入一个集合中。
在将对象放入 map 并循环到下一个对象之前,我需要检查下一个 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.
}
最佳答案
您可以使用
BufferedReader.mark(int)
标记当前位置.要返回到调用BufferedReader.reset()
的位置。mark
的参数是“预读限制”;如果您在读取超过限制后尝试reset()
,您可能会遇到 IOException。或者您可以使用
RandomAccessFile
相反:// Get current position long pos = raf.getFilePointer(); // read more lines... // Return to old position raf.seek(pos);
或者您可以使用
PushbackReader
它允许您未读
字符。但缺点是:PushbackReader
不提供readLine
方法。
关于Java BufferedReader 在循环之前检查循环的下一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9198280/