我有一种方法可以读取 txt 文件中的下一行并执行某些操作。我还有另一种方法也需要检查 EOF。这两种方法在循环内被接受地调用。
方法一:
trace = br.readLine();
if (trace==null)
break; // end of file
方法 2:我需要在不使用相同技术的情况下检查 EOF。否则,它将增加用于 readLine 的 ptr ...
有没有办法做到这一点?
谢谢
我有一种方法可以读取 txt 文件中的下一行并执行某些操作。我还有另一种方法也需要检查 EOF。这两种方法在循环内被接受地调用。
方法一:
trace = br.readLine();
if (trace==null)
break; // end of file
方法 2:我需要在不使用相同技术的情况下检查 EOF。否则,它将增加用于 readLine 的 ptr ...
有没有办法做到这一点?
谢谢
有没有办法做到这一点?
BufferedReader API 不允许您这样做 (*)。如果你真的需要这样做,你需要实现一个自定义的 Reader 类来做到这一点。我将从 开始PushbackReader
,添加一个readLine()
方法,然后通过读取一个字符并将其推回来实现一个 eof 测试方法。
* 从阅读我可以偷看 BufferedReader 的答案吗?,看来该ready()
方法可以用作 EOF 测试。但是,这是标准代码库中当前实现的ready()
产物,根据该方法的 javadoc 规范,可以说是错误的(错误)。
您可以使用
Scanner sc = new Scanner (file);
并阅读
while (sc.hasNext ())
扫描仪有一个
sc.readLine ();
方法。
您也可以使用此格式进行检查以避免 EOF 异常。由于缓冲区大小是提前确定的,因此不会导致任何错误发生。
File myFile = new File("path");
String completeText = "";
FileChannel fc = new FileInputStream(myFile.getAbsoluteFile()).getChannel();
ByteBuffer buffer = ByteBuffer.allocate((int)fc.size());
fc.read(buffer);
Charset charset = Charset.defaultCharset();
CharsetDecoder decoder = charset.newDecoder();
CharBuffer charBuffer = decoder.decode(buffer);
completeText = charBuffer.toString();
buffer.clear();
fc.close();