2012-06-27 77 views
0

我必須讀取文本文件並根據某些邏輯對文件進行一些更改。所以我逐行讀取文件中的行通過使用無法正確寫入java文件*

while ((temp_string = inputstream.readLine()) != null) 
{ 
    /*after employing some other logic*/ 
    outputstream.write(temp_string); 
    outputstream.flush(); 
} 

凡temp_string是一個字符串,併爲InputStream中的聲明是:

BufferedReader inputstream = new BufferedReader(new FileReader(pathtosilentfile)); 

outputstream的聲明是:

BufferedWriter outputstream = new BufferedWriter(new FileWriter(pathtooutputfile)); 

但是,當我寫入文本文件(新的)有很多垃圾,在記事本++顯示爲NULL。另外,寫入的數據在記事本或寫字板中看起來不錯。那麼這是一種編碼錯誤?我沒有明白!會發生什麼事?

+0

如果你可以提供一個簡短的*完整*程序來展示問題,那真的會有所幫助。請閱讀http://tinyurl.com/so-hints –

+0

@JonSkeet實際上我剛下班回家,所以我不能再這樣做了。但是,我向你保證,我所做的只不過是我在這個片段中表達的。 – Chani

+0

其實我想粘貼記事本+ +的數據,但在工作的那些傢伙已經防火牆imgur – Chani

回答

2

這將真正幫助,如果你想告訴我們什麼output_stream是 - 但它應該是一些描述一個Writer - 可能是一個OutputStreamWriter一個FileStream纏,指定相應的編碼(這是你的,我猜)。

如果在記事本/寫字板中看起來沒問題,但在記事本++中損壞,那麼它可能是的一個編碼問題,但是您應該決定使用哪種編碼。 UTF-8通常是一個很好的選擇(對於ASCII來說是緊湊的,涵蓋了整個Unicode,被廣泛支持),但它取決於需要讀取文件的內容。

+0

對不起,我沒有提到outputstream的聲明,但是,它確實是一個包裝在FileWriter中的BufferedWriter。到現在爲止我還沒有考慮過編碼,但是我明天會深入探討各自的Java API,並看看會發生什麼。謝謝。 – Chani

3

首先,你正在閱讀的線條和不寫任何換行符。 temp_string不包含任何換行符/換行符。儘管這似乎並不是你遇到的唯一問題。的NULL之初

+0

實際上我錯過了將'outputstream.newLine()'放在代碼片段中,但是它存在於我的程序中。 – Chani

1

負載意味着你開始寫入文件,而不是開頭的中間。記事本/寫字板簡單地忽略這一點,但是你的文件會比你想要的大得多,並且在讀入其他文件時可能會導致問題。

然而,我們不知道什麼是outputstream或者什麼是你開始寫之前已經做了的話,我們不能幫你。

+0

是的,先生,你是對的,我確實試圖每次寫入文件的末尾。什麼是正確的做法,因爲這是我需要做的。我需要閱讀每行,看它是否與一些屬性相匹配,如果是,則更改行並寫入,如果不行,則只需將該行按原樣添加到文件的新副本。 – Chani