第10章 文件和流_第1頁(yè)
第10章 文件和流_第2頁(yè)
第10章 文件和流_第3頁(yè)
第10章 文件和流_第4頁(yè)
第10章 文件和流_第5頁(yè)
已閱讀5頁(yè),還剩33頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、第10章 文件和流,學(xué)習(xí)導(dǎo)讀,輸入和輸出是一個(gè)程序重要的功能,Java的應(yīng)用程序和Java Applet往往經(jīng)常要通過(guò)輸入和輸出來(lái)讀寫(xiě)數(shù)據(jù)。 本章將介紹如何從一個(gè)能發(fā)送字節(jié)序列的“數(shù)據(jù)源”獲得輸入,以及如何將輸出發(fā)送給能夠接收字節(jié)序列的一個(gè)“目標(biāo)”。,課程結(jié)構(gòu),Java流類庫(kù)簡(jiǎn)介 基本流 數(shù)據(jù)流 過(guò)濾流 文件流 對(duì)象流,10.1 Java流類庫(kù)簡(jiǎn)介,1 流的概念 Java所有的I/O機(jī)制都是基于數(shù)據(jù)流的,這些數(shù)據(jù)流表示了字符或者字節(jié)數(shù)據(jù)的流動(dòng)序列。 流是一個(gè)很形象的概念,當(dāng)程序需要讀取數(shù)據(jù)時(shí),就會(huì)開(kāi)啟一個(gè)通向數(shù)據(jù)源的流,這個(gè)數(shù)據(jù)源可以是文件,內(nèi)存,或是網(wǎng)絡(luò)連接,則這就是“輸入流”,如圖所示。類

2、似的,當(dāng)程序需要寫(xiě)入數(shù)據(jù)的時(shí)候,就會(huì)開(kāi)啟一個(gè)通向目的地的流,這就是“輸出流”,這時(shí)你就可以想像數(shù)據(jù)好像在這其中“流”動(dòng)一樣,如圖所示。,10.1 Java流類庫(kù)簡(jiǎn)介,輸入流,輸出流,10.1 Java流類庫(kù)簡(jiǎn)介,Java中的流分為兩種: 一種是字節(jié)流,另一種是字符流 分別由四個(gè)抽象類來(lái)表示(每種流包括輸入和輸出各兩種,所以一共四個(gè)): InputStream OutputStream Reader Writer,10.1 Java流類庫(kù)簡(jiǎn)介,2 Java的I/O庫(kù) Java中的字節(jié)流是用于處理字節(jié)的輸入和輸出的,包括讀寫(xiě)二進(jìn)制數(shù)據(jù)等方面的內(nèi)容。 InputStream OutputStream

3、 而Java中的字符流則用于處理字符的輸入和輸出,采用的是Unicode編碼,可以實(shí)現(xiàn)國(guó)際化。 Reader Writer,10.1 Java流類庫(kù)簡(jiǎn)介,(1)InputStream 1)abstract int read() 2)int read(byte b) 3)int read(byte b,int off,int len) 4)long skip(long n) 5)int available() 6)void close() 7)void mark(int readlimit) 8)void reset() 9)boolean markSupported(),10.1 Java流類

4、庫(kù)簡(jiǎn)介,(2)OutputStream 1)abstract void write(int b) 2)void write(byte b) 3)void write(byte b,int off,int len) 4)void close() 5)void flush(),10.1 Java流類庫(kù)簡(jiǎn)介,(3)Reader Writer public abstract int read() throws IOException public abstract void write() throws IOException,10.2 基本流,1. 鍵盤(pán)輸入和格式化輸出 它有3個(gè)內(nèi)置的標(biāo)準(zhǔn)流對(duì)象,它

5、們是: 1)標(biāo)準(zhǔn)輸入流System.io:用于程序的輸入,通常用來(lái)讀取用戶從鍵盤(pán)的輸入。 2)標(biāo)準(zhǔn)輸出流System.out:用于程序的輸出,通常用來(lái)在屏幕上顯示信息。 3)標(biāo)準(zhǔn)出錯(cuò)流System.err:用于顯示出錯(cuò)信息。,10.2 基本流,基本的鍵盤(pán)輸入 (1)方法一:使用System.in對(duì)象的方法read()來(lái)讀取鍵盤(pán)的輸入 見(jiàn)例10。1 (2)方法二:可以通過(guò)java.io包中提供的流類接收鍵盤(pán)的輸入 見(jiàn)例10。2 (3)可以通過(guò)控制臺(tái)類Console類來(lái)實(shí)現(xiàn)從鍵盤(pán)輸入;控制臺(tái)類Console不屬于Java的標(biāo)準(zhǔn)類庫(kù),它屬于corejava包 見(jiàn)例10。3,10.2 基本流,格式化輸

6、出 1)輸出方法:用System.out內(nèi)置的標(biāo)準(zhǔn)輸出對(duì)象來(lái)輸出到標(biāo)準(zhǔn)設(shè)備(一般是顯示器) 見(jiàn)例10。3 2)可以控制顯示格式,在java.text包中的NumberFromat類就可以控制輸出的格式 見(jiàn)例10。5 3)用戶還可以創(chuàng)建自己的格式 4)用Console類格式化輸出,10.2 基本流,2.讀和寫(xiě)字節(jié) (1)InputStream類的抽象方法 (2)OutputStream類的抽象方法 (3)available方法,10.3 數(shù)據(jù)流,數(shù)據(jù)流支持所有Java中的基本類型。 可以通過(guò)分別實(shí)現(xiàn)了DataOutput和DataInput兩個(gè)接口的DataOutputStream和DataIn

7、putStream類中的方法對(duì)基本數(shù)據(jù)進(jìn)行讀寫(xiě),10.3 數(shù)據(jù)流,DataInput接口 1)boolean readBoolean():讀入一個(gè)布爾值。 2)byte readByte():讀入一個(gè)8位字節(jié)。 3)char readChar():讀入一個(gè)16位的字符。 4)double readDouble():讀入一個(gè)64位double字符。 5)float readFloat():讀入一個(gè)32位float字符。 6)void readFully(byte b):讀字節(jié),直到讀所有字節(jié)才封鎖,參數(shù)b為讀入數(shù)據(jù)的緩沖區(qū)。,10.3 數(shù)據(jù)流,7)void readFully(byte b,in

8、t off,int len):讀字節(jié),直到讀所有字節(jié)才封鎖,參數(shù)b為讀入數(shù)據(jù)的緩沖區(qū),off為數(shù)據(jù)的起始偏移量,len為寫(xiě)的字節(jié)數(shù)。 8)int readInt():讀一個(gè)32位整數(shù)。 9)String readLine():讀入一行以一個(gè)n,r,rn或EOF結(jié)束的字符串,返回一個(gè)字符串,該字符串包含轉(zhuǎn)換為單位碼字符的行中的所有字節(jié)。 10)long readLong():讀入一個(gè)64位的長(zhǎng)整數(shù)。 11)short readShort():讀入一個(gè)16位的短整數(shù)。 12)String readUTF():讀入一個(gè)UTF格式的字符串。 13)int skipByte(int n):跳過(guò)若干個(gè)字節(jié)

9、,直到跳過(guò)所有的字節(jié)才封鎖,n為跳過(guò)的字節(jié)。,10.3 數(shù)據(jù)流,2 Java.DataOutput接口 1)void writeBoolean(boolean b):寫(xiě)一個(gè)布爾值。 2)void writeByte(byte b):寫(xiě)一個(gè)8位字節(jié)。 3)void writeChar(char c):寫(xiě)一個(gè)16位字符。 4)void writeChars(String s):寫(xiě)入字符串的所有字符。 5)void writeFloat(float f):寫(xiě)32位float數(shù)。 6)void writeDouble(double d):寫(xiě)64位double數(shù)。 7)void writeInt(int

10、 I):寫(xiě)32位整數(shù)。 8)void writeLong(long l):寫(xiě)64位長(zhǎng)整數(shù)。 9)void writeShort(short s):寫(xiě)16位短整數(shù)。 10)void writeUTF(String s):寫(xiě)一個(gè)UTF格式的字符串,10.4 java的輸入輸出流簡(jiǎn)介,一、字節(jié)流:( InputStream,OutStream) 1、FileInputStream(文件輸入流):源自日常文件的數(shù)據(jù)輸入流,它可以創(chuàng)建一個(gè)能從文件中讀取字節(jié)的InputStream類。它的構(gòu)造函數(shù)為: FileInputStream(String filepath) throws FileNotFound

11、Exception; FileInputStream(File fileObj) throws FileNotFoundException; 其中:filepath是文件的全稱路徑,fileObj是描述該文件的File對(duì)象。,2、ByteArrayInputStream(字節(jié)數(shù)組輸入流) 把字節(jié)數(shù)組當(dāng)成源的輸入流。 ByteArrayInputStream 包含一個(gè)內(nèi)部緩沖區(qū),該緩沖區(qū)存儲(chǔ)從流中讀取的字節(jié)。內(nèi)部計(jì)數(shù)器跟蹤 read 方法要提供的下一個(gè)字節(jié)。構(gòu)造函數(shù): ByteArrayInputStream(byte array) ByteArrayInputStream(byte array

12、,int start,int numBytes) 例:ByteArrayInputStreamReset.java,10.4 java的輸入輸出流簡(jiǎn)介,3、FileOutputStream(文件輸出流) 創(chuàng)建一個(gè)可以向文件寫(xiě)入字節(jié)的類OutputStream,可以引發(fā)IOException或SecurityException異常。FileOutputStrem的創(chuàng)建不依賴于文件是否存在。在創(chuàng)建對(duì)象時(shí)FileOutputStream在打開(kāi)輸出文件之前創(chuàng)建它。此時(shí)如果打開(kāi)一個(gè)只讀文件,將會(huì)引發(fā)一個(gè)IOException異常。常用構(gòu)造函數(shù): FileOutputStream(String fileP

13、ath) FileOutputStream(String filePath,boolean append) FileOutputStream(File fileObj) 例:FileOutputStreamDemo.java,10.4 java的輸入輸出流簡(jiǎn)介,4、ByteArrayOutputStream(字節(jié)數(shù)組輸出流) 是一個(gè)把字節(jié)數(shù)組當(dāng)作輸出流的實(shí)現(xiàn),構(gòu)造函數(shù)為: ByteArrayOutputStream():生成一個(gè)32位字節(jié)的緩沖器。 ByteArrayOutputStream(int numBytes):生成一個(gè)跟指定numBytes相同位數(shù)的緩沖器。 5、BufferedIn

14、putStream(緩沖輸入流)和BufferedOutputStream(緩沖輸出流) BufferedInputStream在InputStream中加一個(gè)讀取緩沖,能顯著提高讀取性能。,10.4 java的輸入輸出流簡(jiǎn)介,構(gòu)造函數(shù): BufferedInputStream(InputStream inputStream):生成一個(gè)默認(rèn)長(zhǎng)度的緩沖流。 BufferedInputStream(InputStream inputStream,int bufSize):緩沖器的大小是由bufSize傳入的。 BufferedOutputStream:把write()等方法寫(xiě)入的數(shù)據(jù)暫時(shí)存放在緩沖

15、區(qū)中,當(dāng)緩沖區(qū)滿或者用戶調(diào)用flush()強(qiáng)制寫(xiě)入數(shù)據(jù)時(shí)才把數(shù)據(jù)寫(xiě)入輸入輸出設(shè)備。這樣有效地減少讀寫(xiě)設(shè)備的次數(shù),提高系統(tǒng)的性能。 構(gòu)造函數(shù): BufferedOutputStream(OutputStream outputStream) BufferedOutputStream(OutputStream outputStream,int bufSize) 例:DownLoad.java,10.4 java的輸入輸出流簡(jiǎn)介,6、SequenceInputStream(順序輸入流) 可以連接多個(gè)InputStream流。 7、PushbackInputStream(返回輸入流) 用于輸入流允許字節(jié)

16、被讀取然后返回到流。,10.4 java的輸入輸出流簡(jiǎn)介,二、字符流: 字節(jié)流提供了處理任何類型輸入/輸出操作的足夠的功能,但它們不能直接操作Unicode字符,字符流面向字符,讀寫(xiě)的單位是兩個(gè)字節(jié)。字符流以Reader和Writer為頂層。 常見(jiàn)的字符流: 1、FileReader和FileWriter: FileReader創(chuàng)建一個(gè)可以讀取文件內(nèi)容的Reader類: 構(gòu)造函數(shù): FileReader(String filePath) FileReader(FilefileObj),10.4 java的輸入輸出流簡(jiǎn)介,FileWriter創(chuàng)建一個(gè)可以寫(xiě)文件的Writer類: FileWrit

17、er(String filePath) FileWriter(String filePath,boolean append) FileWriter(File fileObj) 例:txtCopy.java,10.4 java的輸入輸出流簡(jiǎn)介,2、CharArrayReader和CharArrayWriter (1)CharArrayReader是一個(gè)把字符數(shù)組作為源的輸入流的實(shí)現(xiàn),構(gòu)造函數(shù): CharArrayReader(char array); CharArrayReader(char array,int start,int numChars); (2) CharArrayWriter是一

18、個(gè)把字符數(shù)組作為目標(biāo)的輸出流的實(shí)現(xiàn),構(gòu)造函數(shù): CharArrayWriter():創(chuàng)建一個(gè)默認(rèn)長(zhǎng)度的緩沖器。 CharArrayWriter(int numChars):緩沖器長(zhǎng)度由numChars指定。 例:CharArrayReaderDemo.java,10.4 java的輸入輸出流簡(jiǎn)介,3、BufferedReader和BufferedWriter 4、PushbackReader:允許一個(gè)字符或多個(gè)字符被送回輸入流。,10.4 java的輸入輸出流簡(jiǎn)介,10.5過(guò)濾流,對(duì)于某些流來(lái)說(shuō)(比如FileInputStream),它可從文件或一些更特殊的地方讀入字節(jié)數(shù)據(jù)。 對(duì)另一些流來(lái)說(shuō)(

19、比如DataInputStream以及PrintWriter),它們則可將字節(jié)“組裝”成更有用的數(shù)據(jù)類型。 Java程序源必須綜合運(yùn)用這兩種流,將其合并成所謂的“過(guò)濾流”, 方法是將一個(gè)現(xiàn)成的流傳遞給另一個(gè)流的構(gòu)造函數(shù)。,10.6文件流,在Java中,文件流是用得比較廣泛的一種流形式,它以磁盤(pán)文件為輸入或輸出的原始數(shù)據(jù)和目的。 在Java中,把文件看成是一個(gè)字符(字節(jié))的序列。根據(jù)數(shù)據(jù)的組織形式,可將文件分為文本文件和二進(jìn)制文件。 在文本文件中,每一個(gè)字節(jié)存放一個(gè)ASCII碼,代表一個(gè)字符。 二進(jìn)制文件是把內(nèi)存中的數(shù)據(jù)按其在內(nèi)存中的存儲(chǔ)形式原樣輸出到磁盤(pán)文件上存放。 文件流也就根據(jù)所針對(duì)的文件

20、類型的不同而分為文本流和二進(jìn)制流。 在Java的I/O庫(kù)中,抽象類Reader和Writer只能用來(lái)對(duì)文本文件進(jìn)行操作,而 抽象類InputStream和OutputStream 可以對(duì)文本文件或二進(jìn)制文件進(jìn)行操作。,10.5 文件流,1 二進(jìn)制文件的讀寫(xiě) (1)二進(jìn)制文件的寫(xiě) 二進(jìn)制文件的寫(xiě)通常要用到DataOutputStream類 格式如下: FileOutputStream out=new FileOutputStream(“路徑和文件名”); DataOutputStream dos=new DataOutputStream(“out”); 或 DataOutputStream do

21、s=new DataOutputStream( new FielOutputStream(“路徑和文件名”)); 然后可以用DataOutputStream實(shí)現(xiàn)的方法向文件寫(xiě)入數(shù)據(jù) dos.writeDouble(); dos.writeInt() 見(jiàn)例10.6,10.5 文件流,(2)二進(jìn)制文件的讀 二進(jìn)制形式文件的讀,通常要用到DataInputStream類 格式如下: FileInputStream in=new FileInputStream(“路徑和文件名“); DataInputStream dis=new DataInputStream(“in”); 當(dāng)然也可以寫(xiě)成: Data

22、InputStream dis=new DataInputStream( new FileInputStream(“路徑和文件名“)); 然后用數(shù)據(jù)流的方法讀入文件中的數(shù)據(jù),如: double d=dis.readDouble(); int i=dis.readInt(); 見(jiàn)例10。7,10.5 文件流,2 文本文件的讀寫(xiě) 在Java中,采用的是Unicode字符。也就是說(shuō)“1234”這個(gè)字符串的字符編碼是00 31 00 32 00 33 00 34 Java提供了一個(gè)過(guò)濾流,可以用來(lái)彌補(bǔ)Unicode編碼和本機(jī)操作系統(tǒng)采用的字符編碼間不同造成的問(wèn)題 如 FileInputStream f

23、is=new FileInputStream(“myfile.txt”); InputStreamReader isr=new InputStreamReader(fis); 或 nputStreamReader isr=new InputStreamReader( new FileInputStream(“myfile.txt”); 或 FileReader fr=new FileReader(“myfile.txt”),10.5 文件流,(1)寫(xiě)文本文件 1)FileOutputStream 方法是: FileOutputStream out out = new FileOutputStr

24、eam(myfile.txt); PrintStream p = new PrintStream( out ); 用 p.println() 來(lái)寫(xiě)入數(shù)據(jù),然后用 p.close() 關(guān)閉輸入 見(jiàn)例10。9 2)用 FileWriter 方法是:FileWriter fw = new FileWriter(mydata.txt);PrintWriter out = new PrintWriter(fw); 用out.print 或 out.println往文件中寫(xiě)入數(shù)據(jù),寫(xiě)完后要用out.close() 關(guān)閉輸出,用fw.close() 關(guān)閉文件 見(jiàn)例10。10,10.5 文件流,2讀文本文件 1) 用FileInputStream 方法是: FileInputStream fstream = new FileInputStream(args0); DataInputStream in = new DataInput

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論