我有一個方法,讀取txt文件中的下一行並執行一些操作。我還有另一種需要檢查EOF的方法。這兩種方法在循環中被接受地調用。如何檢查沒有readLine()的EOF?
方法1:
trace = br.readLine();
if (trace==null)
break; // end of file
方法2: 我需要檢查EOF而不使用相同的技術。否則,它會增加用於readLine的ptr ...
有沒有什麼辦法可以做到這一點?
感謝
我有一個方法,讀取txt文件中的下一行並執行一些操作。我還有另一種需要檢查EOF的方法。這兩種方法在循環中被接受地調用。如何檢查沒有readLine()的EOF?
方法1:
trace = br.readLine();
if (trace==null)
break; // end of file
方法2: 我需要檢查EOF而不使用相同的技術。否則,它會增加用於readLine的ptr ...
有沒有什麼辦法可以做到這一點?
感謝
您可以使用
Scanner sc = new Scanner (file);
和閱讀
while (sc.hasNext())
掃描程序具有
sc.readLine();
方法。
這個通用答案並沒有開始解決OP在代碼中兩處檢查EOF的具體請求。 –
@MarkoTopolnik:錯! '如果此掃描器在其輸入中有另一個標記,則返回true。此方法可能會在等待輸入進行掃描時阻塞。掃描儀不會超過任何輸入.'您可以在不同的點調用該方法。 –
有沒有辦法做到這一點?
BufferedReader API不允許你這樣做(*)。如果你真的需要這樣做,你需要實現一個自定義的Reader類來做到這一點。我會從PushbackReader
開始,添加一個readLine()
方法,然後通過讀取一個字符並將其推回來實現eof測試方法。
*從閱讀對Can I peek on a BufferedReader?的回答可知,ready()
方法可能用作EOF測試。但是,這是標準代碼庫中ready()
當前實現的一個僞造,根據該方法的javadoc規範可以說是錯誤的(一個bug)。
嗯......謝謝! –
您也可以使用此格式來檢查以避免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();
檢查這個問題:http://stackoverflow.com/questions/2517638/can-i-peek-on-a-bufferedreader和這樣的回答:http://stackoverflow.com/a/2517713/1227804 – user1227804