使用BufferedReader读取行并检查文件结尾
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用BufferedReader读取行并检查文件结尾相关的知识,希望对你有一定的参考价值。
如果我的代码中有这样的东西:
String line = r.readLine(); //Where r is a bufferedReader
如果下一行是文件的结尾,我该如何避免崩溃? (即null)
我需要阅读下一行,因为可能有一些我需要处理的东西,但如果没有代码只是崩溃。
如果有什么东西那么一切都没问题,但我不能保证那里会有东西。
所以,如果我做了类似的事情:(伪代码):
if (r.readLine is null)
//End code
else {check line again and excecute code depending on what the next line is}
我遇到类似这样的问题是,当我检查该行反对null时,它已经移动到下一行,所以我该如何再次检查它?
我没有找到办法做到这一点 - 任何建议都会有很大的帮助。
答案
我...你可以简单地使用这样的结构:
String line;
while ((line = r.readLine()) != null) {
// do your stuff...
}
另一答案
您可以使用以下内容检查文件的结尾。
public bool isEOF(BufferedReader br)
{
boolean result;
try
{
result = br.ready();
}
catch (IOException e)
{
System.err.println(e);
}
return result;
}
另一答案
如果你想循环遍历所有行使用:
while((line=br.readLine())!=null){
System.out.println(line);
}
br.close();
另一答案
在你的情况下,你可以阅读下一行,因为那里可能有东西。如果没有,你的代码不会崩溃。
String line = r.readLine();
while(line!=null){
System.out.println(line);
line = r.readLine();
}
另一答案
首先是一个问题,为什么不使用“功能编程方法”?无论如何,自Java 1.8以来添加了一个新方法lines(),它允许BufferedReader将内容返回为Stream。它从文件中获取所有行作为流,然后您可以根据您的逻辑对字符串进行排序,然后在列表/集中收集它并写入输出文件。如果使用相同的方法,则无需担心NullPointerException。以下是相同的代码片段: -
import java.io.IOException;
import java.io.PrintWriter;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.stream.Collectors;
public class LineOperation {
public static void main(String[] args) throws IOException {
Files.newBufferedReader(Paths.get("C://xyz.txt")).
lines().
collect(Collectors.toSet()). // You can also use list or any other Collection
forEach(System.out::println);
}
}
另一答案
你可以故意让它在你的循环中抛出错误。即:
String s = "";
while (true) {
try {
s = r.readline();
}catch(NullPointerException e) {
r.close();
break;
}
//Do stuff with line
}
其他人都伤心的事情也应该奏效。
以上是关于使用BufferedReader读取行并检查文件结尾的主要内容,如果未能解决你的问题,请参考以下文章
从 InputStream 读取时,Android Socket BufferedReader readLine() 不起作用