2014-09-01 98 views
1

我正在嘗試編寫一個用於從控制檯獲取輸入的代碼&輸入文本將保存在特定文件中。我的代碼獲得控制檯輸入完美&也創建一個文件,但控制檯輸入不保存到文件。如何使用java寫入文件中的輸入文本

這裏是我的代碼:

package com.mahbub.file_object; 

import java.io.BufferedReader; 
import java.io.BufferedWriter; 
import java.io.File; 
import java.io.FileWriter; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.io.Reader; 
import java.util.Scanner; 

public class ConsoleInput { 

    public static void main (String [] args) throws IOException{ 
     BufferedReader br=null; 
     BufferedWriter bw=null; 

     File file=new File("D:/test1.txt"); 



     Reader reader=new InputStreamReader(System.in); 
     br =new BufferedReader(reader); 
     String str=null; 

     do{ 
      System.out.println("Enter 'q' for quit!!"); 
      str=br.readLine(); 
      FileWriter fw=new FileWriter(file,true); 
      bw=new BufferedWriter(fw); 
      bw.write(str); 
      System.out.println(str); 
     }while(!(str.equalsIgnoreCase("q"))); 

    } 
} 

任何人有任何想法來解決這個問題?請幫助.. 感謝先進。!!

回答

1

您需要flush()close()FileWriter(關閉它也會刷新它)。

嘗試這種情況:

do { 
    System.out.println("Enter 'q' for quit!!"); 
    str=br.readLine(); 
    FileWriter fw=new FileWriter(file,true); 
    bw=new BufferedWriter(fw); 
    bw.write(str); 
    bw.flush(); //do this , you missed it 
    System.out.println(str); 
} 
while(!(str.equalsIgnoreCase("q"))); 

bw.close();  //do this , you missed it 
3

寫完後需要關閉或沖洗寫入器;

嘗試:

System.out.println("Enter 'q' for quit!!"); 
     str=br.readLine(); 
     FileWriter fw=new FileWriter(file,true); 
     bw=new BufferedWriter(fw); 
     bw.write(str); 
     bw.flush();//You are Missing this 
     System.out.println(str); 

編輯:好吧,我確實按照建議平齊。

但是,在完成作者之後,您仍然需要致電bw.close();。 Writer關閉會自動刷新它。

+0

您應該在循環開始之前創建並打開您的文件寫入器,然後在循環結束後關閉它 – jk47 2014-09-01 15:05:53

+0

close應該在finally塊中,或者應該使用try-with-resources結構 – bowmore 2014-09-01 15:06:02

0

它看起來並不像你沖洗你的BufferedWriter,這可能是一個問題。

您也永遠不會關閉BufferedWriter,這也有助於自從BufferedWriter在關閉過程中自行刷新。

0

BufferedWriter緩衝器中的字符緩衝器的輸出,而不是立即將字符發送到底層Writer(在這種情況下FileWriter)的。這是一個很好的做法,因爲它減少了可能造成代價高昂的寫入次數。當緩衝區已滿時,或者在進行明確的flush()調用時,字符將發送到底層Writer。

第二個Writer應該總是關閉,以便任何使用的資源可以再次釋放。在關閉之前,close()操作將自動刷新緩衝區中剩餘的任何字符。 (請注意,作家不緩衝flush()方法通常什麼都不做)

這基本上是哪裏出了問題在你的代碼:既然你不沖洗或關閉BufferedWriter,並有可能寫更少的字符的文件比緩衝區大小,您的輸出只是保留在緩衝區中。

其他的一些事情似乎是錯在你的代碼(即不立即使你報告問題)

  • 你每串寫創建一個新的FileWriter。通常情況下,你只能在循環之前使用一個FileWriter。由於您在覆蓋模式下創建了Writer,因此每個String都會覆蓋前一個。
  • 如果文件test1.txt不存在,則在嘗試創建FileWriter時,此代碼將拋出FileNotFoundException
  • 您可以使用字符串「q」作爲標記停止添加到文件,但在檢查終止條件之前先將「q」寫入文件。我想這不是意圖。