我有一个方法可以读取txt文件中的下一行并执行某些操作。我有另一种方法需要检查EOF。这两种方法在循环中被接受地称为。
方法1:
trace = br.readLine();
if (trace==null)
break; // end of file
方法2: 我需要在不使用相同技术的情况下检查EOF。否则,它会增加用于readLine的ptr ......
有没有办法实现这个目标?
由于
答案 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();