1

我有一种方法可以读取 txt 文件中的下一行并执行某些操作。我还有另一种方法也需要检查 EOF。这两种方法在循环内被接受地调用。

方法一:

trace = br.readLine();
   if (trace==null)
       break; // end of file

方法 2:我需要在不使用相同技术的情况下检查 EOF。否则,它将增加用于 readLine 的 ptr ...

有没有办法做到这一点?

谢谢

4

3 回答 3

2

有没有办法做到这一点?

BufferedReader API 不允许您这样做 (*)。如果你真的需要这样做,你需要实现一个自定义的 Reader 类来做到这一点。我将从 开始PushbackReader,添加一个readLine()方法,然后通过读取一个字符并将其推回来实现一个 eof 测试方法。

* 从阅读我可以偷看 BufferedReader 的答案吗?,看来该ready()方法可以用作 EOF 测试。但是,这是标准代码库中当前实现的ready()产物,根据该方法的 javadoc 规范,可以说是错误的(错误)。

于 2012-05-06T15:25:24.583 回答
0

您可以使用

 Scanner sc = new Scanner (file);

并阅读

 while (sc.hasNext ())

扫描仪有一个

  sc.readLine (); 

方法。

于 2012-05-06T15:45:39.587 回答
0

您也可以使用此格式进行检查以避免 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();
于 2012-05-08T04:38:41.210 回答