2012-12-19 39 views
2

我是新來的java和現在學習File io。但我對io非常困惑,因爲有很多對象需要處理它(FileReader,FileWriter,BufferedReader,BufferedWriter,FileInputStream,FileOutputStream ...並且可能還有更多)。java中的最佳文件I/O選項?

我想知道什麼是File io最有效的過程(我應該使用什麼?)。我不想要任何編碼。我只想處理文本文件。 任何簡單的示例代碼都會非常有幫助。

謝謝。

+1

你可以嘗試不同的選擇......通常的BufferedReader包裝一的FileReader最好 – RNJ

+0

考慮使用新的IO API在Java中。['NIO'](http://docs.oracle.com/javase/6/docs/api /java/nio/package-summary.html)。 –

+0

只見NIO,發現它有點聽到(我的壞!)(不明白的代碼) – palatok

回答

5

首先很重要的一點理解和記憶:

  • :序列字節

  • 讀/寫:中字符字符串

不要混合使用它們,如果沒有必要,不要爲一個轉換成另一個,並始終指定的順序編碼。

一些快速的食譜:

閱讀文件作爲字節(二進制讀取)的序列。

new FileInputStream(File f); 

同樣添加緩衝劑:

new BufferedInputStream(new FileInputStream(File f)); 

文件作爲一個字符序列(文本讀數)。

new FileReader(File f); // ugly, dangerous, does not let us specify the encoding 

new InputStreamReader(new FileInputStream(File f),Charset charset); // good, though verbose 

要添加的面向行的緩衝(閱讀的文本的行)

new BufferedReader( ... someReader ...); 

要輸出/寫是幾乎相同的(輸出/寫入器)

+0

真的很有幫助的答案。還有一件事,Charset是什麼?並且會是charset的價值? – palatok

+0

它將匹配您的文件使用的編碼字符。如果有疑問,「UTF-8」是一個流行的選擇。 –

+0

@palatok:文件本身就是一個字節序列。要將其翻譯爲文本,您必須指定字符集編碼,今天使用最多的是UTF-8和ISO-8859-1。另外閱讀這個強制性的鏈接:http://www.joelonsoftware.com/articles/Unicode.html – leonbloy

3

簡單的規則拇指。

文本 - 讀/寫器
二進制 - 的InputStream/OutputStream的

你可以閱讀更多的Files

+2

有一個疑難雜症雖然,'的FileWriter/FileReader'是無用的因爲他們不允許你指定編碼。 – Esailija

+0

但我聽說FileReader,FileWriter使用默認編碼就像那樣,所以這有點棘手。糾正我,如果我錯了 – palatok

0

後續將允許您按行讀入行

BufferedReader br = new BufferedReader(new FileReader(fileLocationTxt)); 

寫作

繼將允許您通過部分

DataOutputStream ds = new DataOutputStream(new FileOutputStream(newLocation)); 

至於你的問題寫一行/一部分線,不存在最好的選擇。即使在這裏,你可以看到我們在使用2個或更多次(看建設者,他們接受其他讀/寫器或的inputStream /輸出流。

最好的選擇取決於你真正想做的事

+0

其實第一個是爲文本文件,而第二個你如果對於二進制文件 – Cratylus

+0

有沒有什麼辦法而不使用FileReader()?我看到有人不鼓勵它(也不明白爲什麼?) – palatok

+0

@palatok:FileReader用於讀取字符。如果一起使用,可能會很糟糕。但不總是。在足夠的情況下可能有一些原因。 BufferedReader用於一次讀取多於一個字符。它可以獲得逐行讀取的方法,這非常有幫助。他們也提高了表現。這是簡單的解釋。 –