2014-03-29 40 views
1

我想通過寫入文件來保存狀態,然後用bufferedReader以後再讀取文件以再次獲取狀態。這裏是我的代碼:如何在java中讀取文本文件的第一行並將其打印出來?

public static void main(String[] args) throws IOException{ 

    FileWriter fw = new FileWriter("C:\\Users\\Nicolas\\Desktop\\save.txt"); 
    BufferedWriter save = new BufferedWriter(fw); 

    save.write("helloWorld"); 

    BufferedReader r = new BufferedReader(new FileReader("C:\\Users\\Nicolas\\Desktop\\save.txt")); 

    System.out.println(r.readLine()); 

    save.close();   
} 

如果我按運行,我被打印出來null。我試過它:

if(r.readLine() != null){ 
    System.out.println(r.readLine()); 
} 

但是從邏輯上講,它現在沒有打印出任何東西。我不知道我在這裏做錯了什麼。你能幫我嗎?

+0

r.close()你也應該需要關閉的BufferedReader以及的 –

+0

可能重複[文件的作家不工作](http://stackoverflow.com/questions/11888496/file-writer-doesnt-work) – Raedwald

回答

0

當寫一個的BufferedWriter文件,內容並未直接寫入到磁盤,因爲它顯然是緩衝。您應該在他的回答中將內容刷新爲@ludo_rj建議的內容。

更好的辦法是儘早關閉作者,這會自動刷新內容。順便說一下,關閉閱讀器也是必要的。

你應該用下面的機制去(我已分發的方式分成幾個方法,使之更加清楚):

public class SaveStateTesing { 

    private static final String FILE_NAME = "C:\\Users\\Nicolas\\Desktop\\save.txt"; 

    public static void main(String[] args) throws IOException { 
     saveState("helloWorld", FILE_NAME); 
     String state = readState(FILE_NAME); 
     System.out.println(state); 
    } 

    private static void saveState(String state, String fileName) throws IOException { 
     try(PrintWriter writer = new PrintWriter(new BufferedWriter(new FileWriter(fileName)))) { 
      writer.println(state); 
     } 
    } 

    private static String readState(String fileName) throws IOException { 
     try(BufferedReader reader = new BufferedReader(new FileReader(fileName))) { 
      return reader.readLine(); 
     } 
    } 

} 

請注意,我用的嘗試,與資源的語句,只適用於Java 7(當然還有8)。如果你是在一箇舊版本的Java運行它,你必須寫的方法如下:

private static void saveState(String state, String fileName) throws IOException { 
     PrintWriter writer = null; 
     try { 
      writer = new PrintWriter(new BufferedWriter(new FileWriter(fileName))); 
      writer.println(state); 
     } finally { 
      if (writer != null) 
       writer.close(); 
     } 
    } 

    private static String readState(String fileName) throws IOException { 
     BufferedReader reader = null; 
     try { 
      reader = new BufferedReader(new FileReader(fileName)); 
      return reader.readLine(); 
     } finally { 
      if (reader != null) 
       reader.close(); 
     } 
    } 
0

A BufferedWriter緩衝區輸出,直到您刷新您寫入的流爲止,因此您需要通過關閉文件或使用save.flush()來刷新流。

public static void main(String[] args) throws IOException { 

     FileWriter fw = new FileWriter("C:\\Users\\Nicolas\\Desktop\\save.txt"); 
     BufferedWriter save = new BufferedWriter(fw); 

     save.write("helloWorld"); 
     save.flush(); // this writes the bytes in the stream to the file. 

     BufferedReader r = new BufferedReader(new FileReader("C:\\Users\\Nicolas\\Desktop\\save.txt")); 

     System.out.println(r.readLine()); 

     save.close(); 
    } 
+0

我認爲BufferedReader應該也需要關閉後閱讀使用r.close(); –

+0

@JunaidHassan它應該是,也應該處理異常,但這是另一個問題。這使它工作,但並不完美。 – jpw

+0

是的,你明白了,是的,例外也應該被捕獲 –

0
// Write to file  
    FileWriter fw = new FileWriter("C:\\Users\\Nicolas\\Desktop\\save.txt"); 
    BufferedWriter save = new BufferedWriter(fw); 

    save.write("example"); 
    save.flush() 

    // read as stream 
    BufferedReader r = new BufferedReader(new FileReader("C:\\Users\\Nicolas\\Desktop\\save.txt")); 
    System.out.println(r.readLine()); 

    save.close(); 
相關問題