2011-03-01 23 views
31
FileReader rd=new FileReader("new.mp4"); 
FileWriter wr=new FileWriter("output.mp4"); 
int ch; 
while((ch=rd.read())!=-1) 
    wr.write(ch); 

wr.flush(); 
wr.close(); 

當我使用FileReaderFileWriter讀取和寫入MP4文件.... output.mp4文件不能被渲染以及.... 但是當我使用FileInputStreamFileOutputStream代替它運作良好。的FileInputStream VS的FileReader

所以我可以得出結論FileReader和作家只能讀寫文本?

+1

http://download.oracle.com/javase/tutorial/essential/io/charstreams.html – Yaneeve 2011-03-01 13:42:49

回答

41

是的,你的結論是正確的ReaderWriter的子類是用於讀/寫文本內容。 InputStream/OutputStream適用於二進制內容。如果你看看文檔:

Reader - 用於讀取字符流的抽象類

InputStream - 抽象類是表示字節輸入流的所有類的超類。

+0

所以我只能讀取.txt文件..因爲pdf,word文件也包含圖像文件..不是它 – saravanan 2011-03-01 13:52:51

+0

@saravanan是的,只有文本文件。 pdf和doc是複雜的格式,需要特殊的庫才能進行有意義的分析。 – Bozho 2011-03-01 13:57:47

+0

@Bozho:我在哪裏可以找到這些庫在我的pgm中使用,並且java創建者是否只爲讀取.txt文件創建字符流的東西 – saravanan 2011-03-01 14:02:18

23

FileReader(實際上任何延伸閱讀器)確實是文本。從documentation of Reader

抽象類閱讀字符流

(重點煤礦)看看API,你會看到它的所有文字做 - 的char代替byte所有的地方。

InputStreamOutputStream適用於二進制數據,如mp4文件。

個人而言,我會盡量避免使用FileReader,因爲它總是使用系統默認字符編碼。相反,使用InputStreamReader圍繞FileInputStream ...但只有當你想處理文本。

順便說一句,這是複製的從輸入到輸出的非常低效的方式...使用readwrite其讀入或從緩衝區寫入重載 - 無論是byte[]char[]。否則,您將爲文件中的每個單字節/字符調用讀取和寫入操作。

您應該關閉finally塊中的IO流,以便即使在處理它們時拋出異常也會關閉它們。 「

5

FileInputStream用於讀取數據的原始字節,像原始圖像的數據流。 FileReaders,在另一方面,用於讀字符

FileInputStreamFileReader之間的區別是, FileInputStream由字節讀取文件字節和FileReader由字符讀取文件的字符的數據流。

所以,當你試圖讀取包含字符"Č", 在FileInputStream會給結果作爲196 140文件,因爲ČASCII268

FileReader將給出結果爲268這是char ČASCII值。

0

一個文本文件,可以使用同時讀取fileReaderfileInputStream但MP3和PNG只能使用fileInputStream

  1. fileReader讀取由炭炭

  2. fileInputStream由字節讀取字節讀