如何在没有readLine()的情况下检查EOF?

时间:2012-05-06 15:15:50

标签: java

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

方法1:

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

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

有没有办法实现这个目标?

由于

3 个答案:

答案 0 :(得分:1)

  

有没有办法实现这个目标?

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

*从阅读Can I peek on a BufferedReader?的答案后,ready()方法似乎可以作为EOF测试。但是,这是标准代码库中ready()的当前实现的工件,根据方法的javadoc规范可能存在错误(错误)。

答案 1 :(得分:0)

您可以使用

 Scanner sc = new Scanner (file);

并阅读

 while (sc.hasNext ())

扫描仪有

  sc.readLine (); 

方法

答案 2 :(得分: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();