2012-12-09 216 views
0

我需要一些幫助,請將輸出寫入文件,我無法使其工作。如果我使用System.out.println它可以工作。如果我在實際的方法中創建文件流和Buffered Writer,它會創建文件,但不會寫入任何內容。我假設這是因爲我的方法是遞歸的,並且每次該方法再次調用它時創建一個新文件。所以我創建了另一個打印方法,並使用字符串值key [i]作爲字符串參數,它什麼都不做。無法寫入文件

任何幫助表示讚賞,謝謝。

public void print(String s)throws IOException 
{ 
    fstream = new FileWriter("out.txt", true); 
    out = new BufferedWriter(fstream); 

    try{ 
     out.write("From print: " + s + " "); 
     out.close(); 
    }catch (Exception e){//Catch exception if any 
     System.err.println("Error: " + e.getMessage()); 
    } 
} 

public void generate() throws IOException 
{ 
    while (k<randomWordNum()) 
    { 
     if (randomNum() <= sumOfFreq[0]) 
     { 
      //System.out.println(getKey[0] + " "); 
      print(getKey[i]); 
      i++; 
      k++; 
      generate(); 
     } 
     if (randomNum() >= sumOfFreq[i] && randomNum() <= sumOfFreq[i+1]) 
     { 
      //System.out.println("From generate: " + getKey[i+1] + " "); 
      print(getKey[i+1]); 
      i++; 
      k++; 
      generate(); 
     } 
     else 
     { 
      i++; 
      generate(); 
     } 
    }//while 
}//generate 

回答

1

我認爲FileWriter該構造函數將覆蓋該文件。所以你需要使用一個代碼行是這樣的:

fstream = new FileWriter("out.txt", true); // true for appending 

而且,總是關閉一個文件時,它超出範圍之前,否則可能永遠不會得到刷新,或者如果你運氣不好收...

還有一件事,假設不是某種調試/故障排除代碼,「從來沒有」趕上Exception。如果你確實抓住了它,一定要在記錄之後重新扔掉它,或者用它做的任何事情。但是,一般來說,總是要捕獲更具體的異常類型。

+0

謝謝。我添加了true,並把out.write()方法下的out.close()試了下來,它工作。我會查找它,但是當我停止程序並重新運行它時,你知道如何清除它嗎? – handro

+0

@handro程序啓動時只需刪除''out.txt''?或者可能保留它並打印一個標記行,告訴程序再次啓動,如果你想保留幾次執行的輸出。 – hyde

+0

感謝您的幫助。當我第一次運行該程序時,我只是將其刪除,並且還修復了我的異常。完美的作品。 – handro

3

您需要.close文件,以確保一切得到書面

+0

並刷新Writer以便在關閉Stream之前清除寫入的內容。 –

+0

真棒,謝謝你!我更新了我的代碼。我只是想弄清楚如何每次都用新的價值來覆蓋它。我認爲我的問題是它正在創建一個新的文件eveytime,我打電話給print()。我會繼續關注它。我試圖在運行main的時候在構造函數中創建新的文件編寫器和Bufferedwriter,但後來我得到了空值。 – handro

+0

@LuiggiMendoza通常在關閉前不需要刷新,關閉會先刷新。只需關閉嵌套流的最外層(它會在嵌套流上調用'close()'(這會在流中嵌套一個更深的層次上調用'close()')。 – hyde