【发布时间】:2020-09-07 04:14:48
【问题描述】:
这是我的代码:
int lines = 0;
br.mark(0);
while (br.readLine() != null) lines++;
System.out.print(lines);
br.reset();
我试图找出输入文件中的行数,然后将其重置回顶部,这样我以后就不会在代码中遇到错误。我认为可以使用标记和重置方法。另外,我的文件相对较小,从其他答案中我了解到,如果文件太大,可能会出现问题。我对这些的使用不正确吗?这是我得到的错误:
Exception in thread "main" java.io.IOException: Mark invalid
at java.io.BufferedReader.reset(BufferedReader.java:512)
at Main.main(Main.java:12)
【问题讨论】:
-
我认为您对
mark(0)的使用是问题所在——请查看the documentation。换句话说,如果我正确理解了文档,那么只要您阅读 anything 标记就会失效,因为您将0作为参数传递。 -
哦,那我如何确定它可以读取的字符数同时仍然保留标记?
-
我想您可以尝试
Integer.MAX_VALUE并忘记它,但取决于该功能的实现方式,这可能会导致问题。但无论如何,你为什么要使用这样的BufferedReader?似乎您正在尝试计算行数,倒带,然后处理文本。如果这是正确的,那么考虑将所有文本读入List<String>,其中每个元素都是一行(让您查询size()的行数)并丢弃BufferedReader。无论如何,这两种方法都会导致整个文本被读入内存。
标签: java file io bufferedreader ioexception