2009-11-20 68 views
4

的FileInputStream讀取文件的所有字節和FileOutputStream中寫入allbytes到一個文件的FileInputStream和FileOutputStream中逐行

哪個班做,如果我想按行讀入一個文件,但行的所有字節我用

使得

如果的fileA包含兩行

LINE1 LINE2

然後字節LINE1和LINE2讀seperately

同樣適用於FileOutputStream中

+0

「行」意味着文本數據。 「輸出流」意味着二進制數據。 這是什麼? – 2009-11-21 17:29:58

回答

12

弗雷德裏克是正確的約BufferedReader,但我不同意PrintWriter - 我與PrintWriter問題是,它燕子例外。

值得理解爲什麼FileInputStreamFileOutputStream沒有任何與行有關的方法:*Stream類是關於二進制數據流的。就二進制數據而言,不存在「線」這樣的事情。 *Reader*Writer類是關於文本,其中行的概念使更多的意義上......雖然一般Reader沒有足夠的智能來讀取一行(只是一個字符塊),所以這就是BufferedReader

InputStreamReaderOutputStreamWriter是適配器類,將字符編碼應用到字節流以將它們轉換爲字符,或將字符流轉換爲字節流。

所以,你可能想要一個BufferedReader包裝InputStreamReader包裝FileInputStream閱讀 - 然後呼籲readLine()。對於書寫,請使用BufferedWriter環繞OutputStreamWriter環繞FileOutputStream - 然後撥打write(String)newLine()。 (這會給你的平臺默認的行分隔符 - 如果你想要一個特定的一個,只是把它寫爲一個字符串。)

也有在FileReader類排序結合FileInputStreamInputStreamReader(和FileWriter不等價),但這些總是使用平臺的默認編碼,這幾乎是從來沒有你想要的。這使得他們幾乎沒有任何IMO。

+0

我同意PrintWriter有缺點,但它是最接近問題的那個。我開始建議一個作家,但它確實不會「逐行」。好點(+1)。 – Fredrik 2009-11-20 07:20:49

+0

@Fredrik:這不是你的錯,Java庫設計者決定給PrintWriter太多的責任:( – 2009-11-20 07:31:26

+0

@Jon:謝謝:-)我知道,我只是想解釋爲什麼我推薦它。 – Fredrik 2009-11-20 11:56:20

相關問題