在使用 BufferedReader.readLine() 讀取文件時,若在 while 循環條件與循環體中重複調用該方法,會導致數據跳行或丟失,甚至拋出異常。這是初學者極易犯的邏輯錯誤。
// 錯誤寫法 1:條件與體內各調用一次
while (bufr.readLine() != null) {
i++;
System.out.println("第" + i + "行:" + bufr.readLine()); // 這裡又讀了一行
}
// 錯誤寫法 2:僅在條件中判斷,體內不讀取
while ((s = bufr.readLine()) != null) {
i++;
System.out.println("第" + i + "行:" + bufr.readLine()); // 再次讀取導致跳行
}
String s = null;
int i = 0;
while ((s = bufr.readLine()) != null) { // 讀取並賦值給變量
i++;
System.out.println("第" + i + "行:" + s); // 直接使用變量
}
readLine() 每次調用都會移動文件指針到下一行。try (FileReader fr = new FileReader(file);
BufferedReader bufr = new BufferedReader(fr)) {
String line;
int lineNum = 0;
while ((line = bufr.readLine()) != null) {
System.out.println("第" + (++lineNum) + "行:" + line);
}
} catch (IOException e) {
e.printStackTrace();
}
優點:自動關閉資源,代碼更簡潔安全。
「讀一次,存變量,用變量」 是讀取流數據的鐵律。切勿在判斷條件與循環體中重複調用讀取方法。