2013-07-11 230 views
3

所以我有一個類,它所做的是讀取文件的內容,然後根據內容做一些事情。讀取.txt文件

package maple; 

import java.io.BufferedReader; 
import java.io.File; 
import java.io.FileReader; 
import java.io.IOException; 

import javax.swing.JOptionPane; 

public class SetSettings { 

public SetSettings() { 

    BufferedReader reader; 

    File f = new File (Shared.saveLocation + "Settings.txt"); 

    String line = ""; 

    if (f.exists()) { 
     while (line != null) { 
      try { 
       //System.out.println("COMES HERE"); 
       reader = new BufferedReader(new FileReader(Shared.saveLocation + "Settings.txt")); 
       line = reader.readLine(); 
       System.out.println(line); 

      } catch (IOException e2) { 
       // TODO Auto-generated catch block 
       //e2.printStackTrace(); 
       //JOptionPane.showMessageDialog(null, "Error Code: Bx001", "Error", 0); 

      } 
     } 
    } 
} 
} 

爲了測試的目的,我把它打印出.txt的每一行。不是打印出.txt文件中的內容,而是打印出第一行。不管如果在.txt文件中有一行或100行,它只會不斷讀取一行。如何讓它讀取下一個並在沒有更多時停止?

+3

停止創建一個新的緩衝讀者。那就是問題所在。在文件聲明旁邊初始化它。 – 2013-07-11 20:36:11

+1

將while條件替換爲:'(line = reader.readLine())!= null'。 – 2013-07-11 20:46:06

回答

6

您正在爲while循環內的文件創建一個新的BufferedReader,因此讀取器在每次執行循環時基本都會重置。將創建閱讀器的線移動到循環外部並放開。

0

reader放在while之前。您正在創建多個閱讀器,然後您只閱讀第一行。

reader = new BufferedReader(new FileReader(Shared.saveLocation + "Settings.txt")); 
while (line != null) { 
    try { 
     line = reader.readLine(); 
     System.out.println(line); 
1

將「新的BufferedReader」行移到while循環之外。

if (f.exists()) { 
     reader = new BufferedReader(new FileReader(Shared.saveLocation + "Settings.txt")); 
     while (line != null) { 
      try { 
       //System.out.println("COMES HERE"); 

       line = reader.readLine(); 
       System.out.println(line); 

      } catch (IOException e2) { 
       // TODO Auto-generated catch block 
       //e2.printStackTrace(); 
       //JOptionPane.showMessageDialog(null, "Error Code: Bx001", "Error", 0); 

      } 
     } 
    } 
+0

行在while循環之前是空的,所以它根本不會循環。 line = reader.readLine();在循環開始之前必須要發生一次 – Chaos

+0

但是行被初始化爲「」,而我不是Java大師,但我認爲「」與空值不一樣...... –

+0

對不起, 你是對的! – Chaos

1

您不斷在while循環中重新創建buffereReader。把它帶到外面。

if (f.exists()) { 
     reader = new BufferedReader(new FileReader(Shared.saveLocation + "Settings.txt")); 
     while (line != null) { 
      try { 
       //System.out.println("COMES HERE"); 
       line = reader.readLine(); 
       System.out.println(line); 

      } catch (IOException e2) { 
       // TODO Auto-generated catch block 
       //e2.printStackTrace(); 
       //JOptionPane.showMessageDialog(null, "Error Code: Bx001", "Error", 0); 

      } 
     } 
    } 

享受:)我們都犯錯誤。

此外,這個例子糟透了你可能從那裏拿走它。 http://www.cafeaulait.org/slides/sd2000east/javaio/56.html

+0

謝謝,但沒有我沒有得到它。 :) – user2526311

1

問題是這一行中while循環:

reader = new BufferedReader(new FileReader(Shared.saveLocation + "Settings.txt")); 

您正在創建每次新的BufferedReader,所以你一遍又一遍讀的第一行。將此線移到循環外並重試。

我想你還必須展開你的try-catch塊來捕捉IO異常。

try { 
reader = new BufferedReader(new FileReader(Shared.saveLocation + "Settings.txt")); 
line = reader.readLine(); 
while (line != null) { 

      //System.out.println("COMES HERE"); 
      System.out.println(line); 
      line = reader.readLine(); 
      } 

} catch (IOException e2) { 
      // TODO Auto-generated catch block 
      //e2.printStackTrace(); 
      //JOptionPane.showMessageDialog(null, "Error Code: Bx001", "Error", 0); 

      } 
1

你應該有這樣的:

if (f.exists()) { 
    reader = new BufferedReader(new FileReader(Shared.saveLocation + "Settings.txt")); 
    while (line != null) { 
     try { 
      //System.out.println("COMES HERE"); 

      line = reader.readLine(); 
      System.out.println(line); 

     } catch (IOException e2) { 
      // TODO Auto-generated catch block 
      //e2.printStackTrace(); 
      //JOptionPane.showMessageDialog(null, "Error Code: Bx001", "Error", 0); 

     } 
    } 
}