希望讀寫一個文本文件,寫了下面2句:
BufferedWriter out;
out = new BufferedWriter("c:\\test.txt");
這種做法是錯誤的,正確寫法是:
BufferedWriter out = newBufferedWriter( new fileWriter("c:\\test.txt"));
==============今日學(xué)習(xí)筆記================================================
學(xué)習(xí)內(nèi)容java的輸入輸出
1、java沒有標(biāo)準(zhǔn)的輸入和輸出語句,輸入輸出過程被抽象為輸入輸出流 [面向?qū)ο蟮恼Z言!流就是對象,來抽象出輸入輸出的過程]
這種操作由 I/O包中的一些流類的方法來實現(xiàn),常用包java.io
2、一個流:一個從源 流向 目的地的數(shù)據(jù)序列
3、輸入輸出流的分類
---按照流的方向劃分:輸入流、輸出流
---按照流的分工劃分:節(jié)點流、處理流
---按照流的內(nèi)容劃分:面向字符的流、面向字節(jié)的流!
4、java.io包的頂級層次結(jié)構(gòu)
--object---inputStream\outputStream [面向字節(jié)流]\Reader\Writer[面向字符流]
Object
---字節(jié)流------|----InputStream
---字節(jié)流------|----OutputStream
---字符流------|----Reader
---字符流------|----Writer
5、什么是字符流:
所有數(shù)據(jù)都是8位字節(jié)組成,邏輯上講,所有的流[數(shù)據(jù)序列]都是“字節(jié)流”
但是,表示[字符]的[字節(jié)流]有其特定的處理單位,故被稱為“字符流”,其他的稱為“字節(jié)流”
字符流:針對字符數(shù)據(jù)的特點作了優(yōu)化,字符流的源和目標(biāo)通常是:文本文件!
6、java字符使用16-bit的Unicode編碼,每個字符2個字節(jié),即16-bit
7、字符流可以實現(xiàn)java程序內(nèi)部格式和文本文件、顯示輸出、鍵盤輸入等外部格式之間的轉(zhuǎn)換[如何轉(zhuǎn)換?]
8、Reader\Writer是java.io包中所有字符流的抽象基類[字符流類結(jié)構(gòu)圖]

圖1:Reader類層次結(jié)構(gòu)

圖二、Writer類層次結(jié)構(gòu)
9、什么是字節(jié)流:
例如:鍵盤輸入的數(shù)據(jù)
數(shù)據(jù)源中包含非字符數(shù)據(jù),如:java編輯器產(chǎn)生的字節(jié)碼文件中含有java虛擬機(jī)的指令,這些信息不能被解釋為字符,必須用字節(jié)流來輸入輸出。
字節(jié)流:通常用于都寫圖片、聲音等二進(jìn)制的數(shù)據(jù)
10、inputStream\outputStream是用來處理8位字節(jié)流的抽象基類[字節(jié)流類結(jié)構(gòu)圖]
11、標(biāo)準(zhǔn)的輸入輸出流
=====標(biāo)準(zhǔn)輸入System.in;是原始的InputStream需要經(jīng)過包裝(如何包裝?)才可以從鍵盤讀取信息
-----標(biāo)準(zhǔn)輸出System.out;
=----標(biāo)準(zhǔn)錯誤輸出System.err后2個是PrintStream,默認(rèn)是對應(yīng)屏幕的輸出(還可以輸出到哪里呢?)
12、處理流:
處理流不直接與數(shù)據(jù)源或目標(biāo)相連,而是與另一個流進(jìn)行配合(如何配合?),對數(shù)據(jù)進(jìn)行某種處理
例如:BufferReader就是一個處理流,與InputStreamReader/FileWriter等節(jié)點流配合,緩沖輸入輸出德信息,提高效率
----------------------------以上的每一句話都值得細(xì)細(xì)體會--alonglee 舒暢java---------------------------------

圖三:I/O流的鏈接
對文章前面提到錯誤代碼的分析解釋:
1、BufferWriter是Writer的子類,屬于字符流類,可以用于文本文件的寫入操作
2、但是BufferWriter類是一個處理流類,不可以直接與數(shù)據(jù)源或目標(biāo)相連,這里的目標(biāo)當(dāng)然是一個文本文件test.txt,它需要與另一個流進(jìn)行配合。那么另一個流是什么呢?
3、由于是準(zhǔn)備寫一個文本文件,需要一個節(jié)點流類---FileWrite來讀取/生成一個文件
4、這樣BufferWriter就是和FileWrite配合對數(shù)據(jù)進(jìn)行緩沖處理!
完整的代碼如下:
.....main(){
String fileName = "C:\\newTestfile.txt";// 注意是2個\\,一個是轉(zhuǎn)義 或者這樣寫c:/newTestfile.txt
BufferWriter out = new BufferWriter(new FileWriter(fileName));//將FileWriter嵌入在BufferWriter中
out.write("this is a test file");
out.newLine();//換行
out.write("中文會不會產(chǎn)生問題?")
out.newLine();//換行
out.close();//清空流里面的內(nèi)容并關(guān)閉它,這里是結(jié)束文件操作
}
}