版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第第8章章 輸入輸入/輸出流和文件操作輸出流和文件操作 8.1 文件和流的概念文件和流的概念 8.2 字節(jié)輸入字節(jié)輸入/輸出流類輸出流類 8.3 字符輸入字符輸入/輸出流類輸出流類 8.4 文件操作文件操作18.1 文件和流的概念文件和流的概念8.1.1 操作系統(tǒng)中的文件和目錄概念操作系統(tǒng)中的文件和目錄概念8.1.2 流的概念流的概念28.1.1 操作系統(tǒng)中的文件和目錄概念操作系統(tǒng)中的文件和目錄概念1/2文件與文件系統(tǒng)文件與文件系統(tǒng)文件文件是信息的一種組織形式,存儲(chǔ)在外部介質(zhì)上的具有標(biāo)識(shí)是信息的一種組織形式,存儲(chǔ)在外部介質(zhì)上的具有標(biāo)識(shí)名的一組相關(guān)信息集合。具有保存性,其內(nèi)容可以長(zhǎng)期保存名的一組
2、相關(guān)信息集合。具有保存性,其內(nèi)容可以長(zhǎng)期保存和多次使用。和多次使用。文件系統(tǒng)文件系統(tǒng)負(fù)責(zé)存取和管理文件,是操作系統(tǒng)不可或缺的重要負(fù)責(zé)存取和管理文件,是操作系統(tǒng)不可或缺的重要功能。文件擴(kuò)展名標(biāo)識(shí)文件類型,文件名和擴(kuò)展名以功能。文件擴(kuò)展名標(biāo)識(shí)文件類型,文件名和擴(kuò)展名以”.”分隔分隔.目錄結(jié)構(gòu)與文件檢索目錄結(jié)構(gòu)與文件檢索 目錄是文件系統(tǒng)組織和管理的基本單位,目錄中保存它所管目錄是文件系統(tǒng)組織和管理的基本單位,目錄中保存它所管理的每個(gè)文件的基本屬性信息(稱為文件目錄項(xiàng)或文件控制理的每個(gè)文件的基本屬性信息(稱為文件目錄項(xiàng)或文件控制塊)。目錄中可以包含文件和子目錄。塊)。目錄中可以包含文件和子目錄。38.
3、1.1 操作系統(tǒng)中的文件和目錄概念操作系統(tǒng)中的文件和目錄概念2/2文件的邏輯結(jié)構(gòu)文件的邏輯結(jié)構(gòu)流式文件流式文件:由字節(jié)序列或者字符序列組成,例如文本文:由字節(jié)序列或者字符序列組成,例如文本文件和源程序是字符流式文件件和源程序是字符流式文件記錄式文件記錄式文件:是一種有結(jié)構(gòu)的文件,它包括若干記錄。:是一種有結(jié)構(gòu)的文件,它包括若干記錄。記錄是文件內(nèi)獨(dú)立的最小信息單位,操作系統(tǒng)每次操作記錄是文件內(nèi)獨(dú)立的最小信息單位,操作系統(tǒng)每次操作至少存儲(chǔ)、檢索或更新一個(gè)記錄。至少存儲(chǔ)、檢索或更新一個(gè)記錄。文件的存取方法文件的存取方法順序存?。喊从涗涰樞蜻M(jìn)行讀順序存?。喊从涗涰樞蜻M(jìn)行讀/寫操作的存取方法。寫操作的存
4、取方法。隨機(jī)存?。喊从涗浳恢眯蛱?hào)進(jìn)行讀隨機(jī)存?。喊从涗浳恢眯蛱?hào)進(jìn)行讀/寫操作的存取方法。寫操作的存取方法。文件的使用接口文件的使用接口操作接口:為計(jì)算機(jī)用戶提供的文件操作功能。操作接口:為計(jì)算機(jī)用戶提供的文件操作功能。應(yīng)用程序接口應(yīng)用程序接口:由一組系統(tǒng)調(diào)用組成,包括建立文件、:由一組系統(tǒng)調(diào)用組成,包括建立文件、打開文件、讀打開文件、讀/寫文件等等操作寫文件等等操作48.1.2 流的概念流的概念1. 流的定義和作用流的定義和作用1)流的定義、方向性和讀)流的定義、方向性和讀/寫操作寫操作流的定義流的定義:流是指一組有順序的、有起點(diǎn)和終點(diǎn):流是指一組有順序的、有起點(diǎn)和終點(diǎn)的字節(jié)集合,是對(duì)數(shù)據(jù)傳輸
5、的總稱和抽象。數(shù)據(jù)在兩的字節(jié)集合,是對(duì)數(shù)據(jù)傳輸?shù)目偡Q和抽象。數(shù)據(jù)在兩個(gè)對(duì)象之間的傳輸都稱為流。個(gè)對(duì)象之間的傳輸都稱為流。 方向性方向性:分為輸入和輸出流。:分為輸入和輸出流。 讀寫操作讀寫操作:一個(gè)流只能進(jìn)行讀或者寫的一種操作,:一個(gè)流只能進(jìn)行讀或者寫的一種操作,不能同時(shí)進(jìn)行讀和寫。分為輸入流(讀操作)和輸出不能同時(shí)進(jìn)行讀和寫。分為輸入流(讀操作)和輸出流(寫操作)。流(寫操作)。58.1.2 流的概念流的概念1.流的定義和作用流的定義和作用2)流采用緩沖區(qū)技術(shù)流采用緩沖區(qū)技術(shù) 對(duì)流進(jìn)行讀對(duì)流進(jìn)行讀/寫操作的最小單位是字節(jié),這樣效率寫操作的最小單位是字節(jié),這樣效率很低。通過(guò)緩沖區(qū)技術(shù)提供效率。
6、很低。通過(guò)緩沖區(qū)技術(shù)提供效率。 緩沖區(qū):緩沖區(qū):通過(guò)緩沖區(qū)一次可以讀寫若干個(gè)字節(jié),通過(guò)緩沖區(qū)一次可以讀寫若干個(gè)字節(jié),使數(shù)據(jù)以足夠大的數(shù)據(jù)塊形式傳送,提供數(shù)據(jù)傳輸效使數(shù)據(jù)以足夠大的數(shù)據(jù)塊形式傳送,提供數(shù)據(jù)傳輸效率。率。3)流的作用)流的作用流的目的是獨(dú)立于設(shè)備(驅(qū)動(dòng)程序),使應(yīng)用程序屏流的目的是獨(dú)立于設(shè)備(驅(qū)動(dòng)程序),使應(yīng)用程序屏蔽外設(shè)的差異性,以同樣的方法操作各種外設(shè)。蔽外設(shè)的差異性,以同樣的方法操作各種外設(shè)。68.1.2 流的概念流的概念2. 流的存在流的存在 4種場(chǎng)景下的數(shù)據(jù)流動(dòng)種場(chǎng)景下的數(shù)據(jù)流動(dòng) 1)標(biāo)準(zhǔn)的輸入)標(biāo)準(zhǔn)的輸入/輸出輸出 2)文件讀寫操作)文件讀寫操作 3)線程通信)線程通信
7、 4)網(wǎng)絡(luò)通信)網(wǎng)絡(luò)通信7這是前面兩種需要使這是前面兩種需要使用流的場(chǎng)景用流的場(chǎng)景8.1.2 流的概念流的概念83. Java的流類和文件類的流類和文件類1)按照流中元素的基本單位,分為字節(jié)流和字符流。每類流又分為輸入和輸出兩個(gè)方向。2)字節(jié)流以InputStream/OutputStream為根類;字符流一Reader和Writer為根類。1)流類)流類InputStream抽象字節(jié)輸入流類抽象字節(jié)輸入流類OuputStream抽象字節(jié)輸出流類抽象字節(jié)輸出流類Reader抽象字符輸入流類抽象字符輸入流類Writer抽象字符輸出流類抽象字符輸出流類2)文件操作類)文件操作類File文件類文件類
8、RandomAccessFile 隨機(jī)存取文件類隨機(jī)存取文件類9這是最基礎(chǔ)的流類和文件類,這是最基礎(chǔ)的流類和文件類,P216的的圖圖8.1給出了詳細(xì)的類層次結(jié)構(gòu)。給出了詳細(xì)的類層次結(jié)構(gòu)。Java流和文件的根類流和文件的根類10類類說(shuō)明說(shuō)明InputStream抽象抽象字節(jié)輸入流類字節(jié)輸入流類,是所有字節(jié)輸入流類的根類,是所有字節(jié)輸入流類的根類OutputStream抽象抽象字節(jié)輸出流類字節(jié)輸出流類,是所有字節(jié)輸出流類的根類,是所有字節(jié)輸出流類的根類Reader抽象抽象字符輸入流類字符輸入流類,是所有字符輸入流類的根類,是所有字符輸入流類的根類Writer抽象抽象字符輸出流類字符輸出流類,是所有
9、字符輸出流類的根類,是所有字符輸出流類的根類File文件類文件類RandomAccessFile隨機(jī)存取文件類隨機(jī)存取文件類8.2 字節(jié)字節(jié)輸入輸入/輸出流類輸出流類8.2.1 抽象字節(jié)流抽象字節(jié)流8.2.2 文件字節(jié)流文件字節(jié)流8.2.3 數(shù)據(jù)字節(jié)流數(shù)據(jù)字節(jié)流8.2.4 對(duì)象字節(jié)流對(duì)象字節(jié)流8.2.5 管道字節(jié)流管道字節(jié)流118.2.1 抽象字節(jié)流抽象字節(jié)流1.InputStream類及其子類類及其子類public abstract class InputStream extends Object implements Closeable public abstract int read()
10、 throws IOException; /返回讀取的一個(gè)字節(jié),抽象方法返回讀取的一個(gè)字節(jié),抽象方法 public int read(byte b) throws IOException /從輸入流中讀取若干字節(jié)到指定緩沖區(qū),返回從輸入流中讀取若干字節(jié)到指定緩沖區(qū),返回實(shí)際讀取的字節(jié)數(shù)實(shí)際讀取的字節(jié)數(shù) public void close() throws IOException /關(guān)閉輸入流,空方法關(guān)閉輸入流,空方法12read方法()方法():讀取到的字節(jié)數(shù)據(jù)存放在讀取到的字節(jié)數(shù)據(jù)存放在b數(shù)組中,數(shù)組中,返回值為讀取到的字節(jié)數(shù),即返回值為讀取到的字節(jié)數(shù),即b數(shù)組中的元素個(gè)數(shù)。數(shù)組中的元素個(gè)數(shù)
11、。InputStream類的子類類的子類13對(duì)應(yīng)單字節(jié)、基本類型數(shù)據(jù)、對(duì)象和管道字節(jié)流對(duì)應(yīng)單字節(jié)、基本類型數(shù)據(jù)、對(duì)象和管道字節(jié)流2. OutputStream類及其子類類及其子類public abstract class OutputStream extends Object implements Closeable, Flushable public abstract void write(int b) throws IOException; /寫入一個(gè)字節(jié),抽象方法寫入一個(gè)字節(jié),抽象方法 public void write(byte b) throws IOException /將緩沖區(qū)中
12、的若干字節(jié)寫入輸出流將緩沖區(qū)中的若干字節(jié)寫入輸出流 public void flush() throws IOException /立即傳輸立即傳輸 public void close() throws IOException /關(guān)閉輸出流,空方法關(guān)閉輸出流,空方法14把值為把值為b的整形數(shù),寫入一個(gè)字節(jié)。而不是寫入了一個(gè)的整形數(shù),寫入一個(gè)字節(jié)。而不是寫入了一個(gè)整形數(shù),占用整形數(shù),占用4個(gè)字節(jié)。個(gè)字節(jié)。OutputStream類的子類類的子類15對(duì)應(yīng)單字節(jié)、基本類型數(shù)據(jù)、對(duì)象和管道字節(jié)流對(duì)應(yīng)單字節(jié)、基本類型數(shù)據(jù)、對(duì)象和管道字節(jié)流System.out是是PrintStream對(duì)象對(duì)象圖圖8.2
13、各種字節(jié)輸入各種字節(jié)輸入/輸出流的讀輸出流的讀/寫方法寫方法 16圖圖8.3 使用流類和文件類出現(xiàn)異常類的層次結(jié)構(gòu)使用流類和文件類出現(xiàn)異常類的層次結(jié)構(gòu) 由于輸入輸出需要與外設(shè)交互,讀取或?qū)懭氩僮鲿r(shí)需要處理的異常。 Eclipse會(huì)自動(dòng)提示需要處理哪種異常,如讀取文件會(huì)提示處理FileNotFoundException,讀寫對(duì)象會(huì)提示ClassNotFoundException等。Java標(biāo)準(zhǔn)輸入標(biāo)準(zhǔn)輸入/輸出處理字節(jié)流輸出處理字節(jié)流1.標(biāo)準(zhǔn)輸入標(biāo)準(zhǔn)輸入/輸出常量輸出常量public final class System extends Object public final static In
14、putStream in /標(biāo)準(zhǔn)輸入常量標(biāo)準(zhǔn)輸入常量 public final static PrintStream out /標(biāo)準(zhǔn)輸出常量標(biāo)準(zhǔn)輸出常量 public final static PrintStream err /標(biāo)準(zhǔn)錯(cuò)誤輸出常量標(biāo)準(zhǔn)錯(cuò)誤輸出常量182. PrintStream類類public class PrintStream extends FilterOutputStream public void print(boolean b) public void print(char c) public void print(long l) public void print(i
15、nt i) public void print(float f) public void print(double d) public void print(String s) public void print(Object obj) public void println()19標(biāo)準(zhǔn)輸入標(biāo)準(zhǔn)輸入/輸出字節(jié)流例子輸出字節(jié)流例子2013和和10分別是分別是 回車回車 和和換行換行標(biāo)準(zhǔn)輸出空格當(dāng)作字符讀入空格當(dāng)作字符讀入8.2.2 文件字節(jié)流文件字節(jié)流1.FileInputSream類類public class FileInputStream extends InputStream public
16、 FileInputStream(String name); public FileInputStream(File file); public int read(); /從此輸入流中讀取一個(gè)數(shù)據(jù)字節(jié)。從此輸入流中讀取一個(gè)數(shù)據(jù)字節(jié)。 public int read(byte b); /從此輸入流中將最多從此輸入流中將最多 b.length 個(gè)字個(gè)字節(jié)的數(shù)據(jù)讀入一個(gè)節(jié)的數(shù)據(jù)讀入一個(gè) byte 數(shù)組中。數(shù)組中。 public long skip(long n);/從輸入流中跳過(guò)并丟棄從輸入流中跳過(guò)并丟棄 n 個(gè)字節(jié)的數(shù)據(jù)。個(gè)字節(jié)的數(shù)據(jù)。21讀文件2. FileOutputStream類類publi
17、c class FileOutputStream extends OutputStream public FileOutputStream(String name) ; public FileOutputStream(File file); public FileOutputStream(String name, boolean append); public void write(int b); /將指定字節(jié)寫入此文件輸出流。將指定字節(jié)寫入此文件輸出流。 public void write(byte b) ; /將將 b.length 個(gè)字節(jié)從指定個(gè)字節(jié)從指定 byte 數(shù)組寫入此文件輸出流
18、中。數(shù)組寫入此文件輸出流中。22寫文件【例例8.1】 理解字節(jié)流。理解字節(jié)流。(1)從文件字節(jié)流中從文件字節(jié)流中讀寫讀寫1個(gè)字節(jié)個(gè)字節(jié)public class FileStream_byte1 public static void main(String args) throws IOExceptionString filename =filesStream.byte;FileOutputStream fout = new FileOutputStream(filename); /創(chuàng)建文件輸出字節(jié)流對(duì)象fout.write(-1);/寫入整數(shù)參數(shù)的最低字節(jié)fout.close();/關(guān)閉文件字
19、節(jié)輸出流FileInputStream fin = new FileInputStream(filename); /創(chuàng)建文件輸入字節(jié)流對(duì)象int i;while(i=fin.read()!= -1 ) /每次讀取一個(gè)字節(jié),字節(jié)流結(jié)束返回System.out.print( + i);fin.close();程序項(xiàng)程序項(xiàng)fileStream.byte寫入了一個(gè)寫入了一個(gè)-1,讀取后打印。,讀取后打印??雌饋?lái)輸出的應(yīng)該是看起來(lái)輸出的應(yīng)該是-1,實(shí)際上卻是,實(shí)際上卻是255,為什么?,為什么?如果希望輸出是如果希望輸出是 1,如何修改程序如何修改程序System.out.print(“ ” + (by
20、te) i);(2) 從字節(jié)流中讀寫從字節(jié)流中讀寫4個(gè)字節(jié)作為個(gè)字節(jié)作為1個(gè)個(gè)int整數(shù)整數(shù)思路:對(duì)整形的4個(gè)字節(jié)經(jīng)過(guò)移位后分4次寫入。讀取時(shí)也是分4次讀入,通過(guò)移位組合成一個(gè)整數(shù)26public static void main(String args) throws IOExceptionString filename =filesS;FileOutputStream fout = new FileOutputStream(filename); /創(chuàng)建文件輸出字節(jié)流對(duì)象int value = -128;fout.write(value24); /整數(shù)右移24位,即寫入整數(shù)
21、的最高字節(jié)fout.write(value16);fout.write(value8);fout.write(value);fout.close();/關(guān)閉文件字節(jié)輸出流FileInputStream fin = new FileInputStream(filename); /創(chuàng)建文件輸入字節(jié)流對(duì)象while(value=fin.read()!= -1 ) /每次讀取一個(gè)字節(jié),字節(jié)流結(jié)束返回int tmp;for(int j=0;j3&(tmp=fin.read()!=-1;j+)value = value8 | tmp;System.out.print(value + );fin.c
22、lose();讀寫一個(gè)整數(shù)真的需要這么復(fù)雜嗎【例例8.2】 使用使用字節(jié)流字節(jié)流讀寫文件。讀寫文件。(1)文件輸入操作)文件輸入操作(2)文件輸出操作)文件輸出操作(3)文件復(fù)制操作)文件復(fù)制操作 FileInputStream fin = new FileInputStream(this.filename);int count = fin.read(buffer); FileOutputStream fout = new FileOutputStream(filename2); fout.write(buffer);fin.close(); fout.close();27文件格式:文件格式:
23、按按ASCII碼或者字節(jié)存儲(chǔ)碼或者字節(jié)存儲(chǔ)一次讀寫多個(gè)字節(jié)一次讀寫多個(gè)字節(jié)按字節(jié)寫成文件,文本編輯器不可讀查看ByteFile.dat,其內(nèi)容不可讀,文件大小10字節(jié)使用文件字節(jié)輸入使用文件字節(jié)輸入/輸出流輸出流FileInputStream和和FileOutputStream類,可以實(shí)現(xiàn)記錄式文件的讀類,可以實(shí)現(xiàn)記錄式文件的讀/寫操作。但是字節(jié)流的寫操作。但是字節(jié)流的操作基本單位是字節(jié)操作基本單位是字節(jié),如,如果對(duì)一個(gè)基本數(shù)據(jù)類型的數(shù)據(jù)進(jìn)行讀寫操作,需要果對(duì)一個(gè)基本數(shù)據(jù)類型的數(shù)據(jù)進(jìn)行讀寫操作,需要進(jìn)行字節(jié)和基本數(shù)據(jù)類型的轉(zhuǎn)換,實(shí)現(xiàn)過(guò)程麻煩;進(jìn)行字節(jié)和基本數(shù)據(jù)類型的轉(zhuǎn)換,實(shí)現(xiàn)過(guò)程麻煩;Java
24、已經(jīng)將基本數(shù)據(jù)類型的讀寫操作封裝成數(shù)據(jù)已經(jīng)將基本數(shù)據(jù)類型的讀寫操作封裝成數(shù)據(jù)字節(jié)流。數(shù)據(jù)字節(jié)輸入流字節(jié)流。數(shù)據(jù)字節(jié)輸入流DataInputStream和輸和輸出流出流DataOutputStream類提供類提供直接讀寫直接讀寫8種基本種基本數(shù)據(jù)類型數(shù)據(jù)類型數(shù)據(jù)的方法。數(shù)據(jù)的方法。288.2.3 數(shù)據(jù)字節(jié)流數(shù)據(jù)字節(jié)流public class DataInputStream extends FilterInputStream implements DataInput public DataInputStream(InputStream in) /構(gòu)造方法構(gòu)造方法 public final shor
25、t readShort() throws IOException public final byte readByte() throws IOException public final int readInt() throws IOException /讀取整型讀取整型 public final long readLong() throws IOException public final float readFloat() throws IOException public final double readDouble() throws IOException public final
26、char readChar() throws IOException /讀取字符讀取字符 public final boolean readBoolean() throws IOException 291. DateInputStream類類構(gòu)造方法的參數(shù)類型是流類構(gòu)造方法的參數(shù)類型是流類2. DataOutputStream類類public class DataOutputStream extends FilterOutputStream implements DataOutput public DataOutputStream(OutputStream out) /構(gòu)造方法構(gòu)造方法 pub
27、lic final void writeByte(int v) throws IOException public final void writeShort(int v) throws IOException public final void writeInt(int v) throws IOException /寫入一個(gè)整型寫入一個(gè)整型 public final void writeLong(long v) throws IOException public final void writeFloat(float v) throws IOException public final vo
28、id writeDouble(double v) throws IOException public final void writeChar(int v) throws IOException /寫入一個(gè)字符寫入一個(gè)字符 public final void writeBoolean(boolean v) throws IOException public final void writeChars(String s) throws IOException /寫入一個(gè)字符串寫入一個(gè)字符串 public final int size() /返回實(shí)際寫入的字節(jié)數(shù)返回實(shí)際寫入的字節(jié)數(shù)30構(gòu)造方法的參
29、數(shù)類型是流類構(gòu)造方法的參數(shù)類型是流類【例例8.3】 使用數(shù)據(jù)流讀寫整數(shù)文件。使用數(shù)據(jù)流讀寫整數(shù)文件。 1.數(shù)據(jù)寫入文件的思路同標(biāo)準(zhǔn)輸出數(shù)據(jù)寫入文件的思路同標(biāo)準(zhǔn)輸出2.捕獲異常控制輸入結(jié)束捕獲異??刂戚斎虢Y(jié)束 31讀取文件過(guò)程需要與讀取文件過(guò)程需要與外設(shè)交互,容易出現(xiàn)外設(shè)交互,容易出現(xiàn)異常,所以需要進(jìn)行異常,所以需要進(jìn)行異常處理異常處理 正確讀取文件內(nèi)容的前提是:事先知道文件存儲(chǔ)的格式和正確讀取文件內(nèi)容的前提是:事先知道文件存儲(chǔ)的格式和順序,如順序,如IntFile例子中都是整形數(shù)據(jù);例子中都是整形數(shù)據(jù); 如果讀寫的文件里面有多種數(shù)據(jù)類型,如何讀寫,如把如果讀寫的文件里面有多種數(shù)據(jù)類型,如何讀寫
30、,如把IntFile修改為整形和修改為整形和double依次存取方式。依次存取方式。文件讀取的順序一定要和寫入順序完文件讀取的順序一定要和寫入順序完全一致,否則讀到的結(jié)果就不正確。全一致,否則讀到的結(jié)果就不正確。8.2.4 對(duì)象字節(jié)流對(duì)象字節(jié)流1.ObjectInputStream類類public class ObjectInputStream extends InputStream implements ObjectInput, ObjectStreamConstants public ObjectInputStream(InputStream in) /構(gòu)造方法構(gòu)造方法 public fi
31、nal Object readObject(); /讀取一個(gè)對(duì)象讀取一個(gè)對(duì)象 public int readInt(); 322. ObjectOutputStream類類public class ObjectOutputStream extends OutputStream implements ObjectOutput, ObjectStreamConstants public ObjectOutputStream(OutputStream out) /構(gòu)造方法構(gòu)造方法 public final void writeObject(Object obj) ;/寫入一個(gè)對(duì)象寫入一個(gè)對(duì)象【例例8
32、.4】 使用對(duì)象流讀寫記錄式文件。使用對(duì)象流讀寫記錄式文件。33 為了把對(duì)象寫入文件,所有的對(duì)象為了把對(duì)象寫入文件,所有的對(duì)象(包括包括MyDate/Person/Student)都需要實(shí)現(xiàn)都需要實(shí)現(xiàn)Serializable接口接口; 如何從對(duì)象文件讀取出對(duì)象出來(lái)?如何從對(duì)象文件讀取出對(duì)象出來(lái)? Student stud = (Student)objin.readObject(); 同樣也需要保證按照對(duì)象讀取順序和寫入順序完全一致;同樣也需要保證按照對(duì)象讀取順序和寫入順序完全一致;各種輸入各種輸入/輸出流及其讀輸出流及其讀/寫方法寫方法 34 System.in.read只能按字節(jié)讀取,為了從
33、鍵盤讀取各種基本只能按字節(jié)讀取,為了從鍵盤讀取各種基本數(shù)據(jù)類型,需要使用數(shù)據(jù)類型,需要使用Scanner8.2.6 管道字節(jié)流管道字節(jié)流PipedInputStream類類PipedOutputStream類類建立管道流的方法建立管道流的方法 PipedInputStream in = new PipedInputStream();try PipedOutputStream out= new PipedOutputStream(in);catch(IOException ioe) 35 標(biāo)準(zhǔn)的輸入/輸出 文件讀寫操作 線程通信 網(wǎng)絡(luò)通信 這是第這是第1種創(chuàng)建管道并建立連接的方式;種創(chuàng)建管道并建
34、立連接的方式; 第第2種是先分別創(chuàng)建輸入、輸出管道流,再種是先分別創(chuàng)建輸入、輸出管道流,再使用使用connect方法將它們連接方法將它們連接【例例】 點(diǎn)對(duì)點(diǎn)的線程間管道通信。點(diǎn)對(duì)點(diǎn)的線程間管道通信。36 代碼中有一個(gè)發(fā)送線程,一個(gè)接收線程代碼中有一個(gè)發(fā)送線程,一個(gè)接收線程 發(fā)送線程和接收線程使用管道通信發(fā)送線程和接收線程使用管道通信 發(fā)送線程優(yōu)先級(jí)高于接收線程發(fā)送線程優(yōu)先級(jí)高于接收線程 發(fā)送線程向發(fā)送線程向PipedOutputStream依次寫入數(shù)據(jù)依次寫入數(shù)據(jù) 接收線程從接收線程從PipedInputStream依次讀取數(shù)據(jù)依次讀取數(shù)據(jù)【例例8.4】 使用管道流實(shí)現(xiàn)的發(fā)牌程序。使用管道流實(shí)
35、現(xiàn)的發(fā)牌程序。圖圖8.9 發(fā)牌程序中多個(gè)線程對(duì)象間的管道流發(fā)牌程序中多個(gè)線程對(duì)象間的管道流 37 在在7. 多線程部分,采用共享內(nèi)容和多線程協(xié)作方式完成此任務(wù)。多線程部分,采用共享內(nèi)容和多線程協(xié)作方式完成此任務(wù)。 本章的思路是:建立好本章的思路是:建立好4對(duì)管道輸入輸出流,對(duì)管道輸入輸出流,sender線程依次向線程依次向4個(gè)輸出個(gè)輸出管道寫數(shù)據(jù),管道寫數(shù)據(jù),4個(gè)個(gè)Receiver線程分別從自己的輸入管道流讀取數(shù)據(jù)。線程分別從自己的輸入管道流讀取數(shù)據(jù)。8.3 字符輸入字符輸入/輸出流類輸出流類8.3.1 抽象字符流抽象字符流8.3.2 字節(jié)字節(jié)/字符轉(zhuǎn)換流字符轉(zhuǎn)換流 8.3.3 文件字符流文件
36、字符流8.3.4 緩沖字符流緩沖字符流8.3.5 格式化字符輸出流格式化字符輸出流 8.3.6 Java標(biāo)準(zhǔn)輸入標(biāo)準(zhǔn)輸入/輸出輸出388.3.1 抽象字符流抽象字符流1.Reader類類public abstract class Reader extends Object implements Readable, Closeable public int read(); /讀取單個(gè)字符。讀取單個(gè)字符。 public int read(char cbuf); / 將字符讀入數(shù)組。將字符讀入數(shù)組。 abstract public int read(char cbuf, int off, int l
37、en) ; / 將字符讀入數(shù)組的某一部分。將字符讀入數(shù)組的某一部分。 abstract public void close();392. Writer類類public abstract class Writer implements Appendable, Closeable, Flushable public void write(int c); /寫入單個(gè)字符。寫入單個(gè)字符。 public void write(char cbuf); /寫入字符數(shù)組。寫入字符數(shù)組。 public void write(String str); /將字符串寫入輸出流將字符串寫入輸出流 public Writ
38、er append(char c); /將指定字符添加到此將指定字符添加到此 writer。 public abstract void flush(); /將緩沖區(qū)內(nèi)容寫入輸出流將緩沖區(qū)內(nèi)容寫入輸出流 public abstract void close();40圖圖8.10 各種字符輸入各種字符輸入/輸出流的讀輸出流的讀/寫方法寫方法 8.3.2 字節(jié)字節(jié)/字符轉(zhuǎn)換流字符轉(zhuǎn)換流 1.InputStreamReader字節(jié)輸入流轉(zhuǎn)換成字符輸入流類字節(jié)輸入流轉(zhuǎn)換成字符輸入流類public class InputStreamReader extends Reader public InputStr
39、eamReader(InputStream in) /in指定字節(jié)輸入流作為數(shù)據(jù)源,采用默認(rèn)字符集指定字節(jié)輸入流作為數(shù)據(jù)源,采用默認(rèn)字符集 public InputStreamReader(InputStream in, String charsetName) /指定字符集名稱指定字符集名稱 throws UnsupportedEncodingException /不支持不支持charsetName字符集,拋出異常字符集,拋出異常 public String getEncoding() /返回字符集名稱字符串返回字符集名稱字符串2.字節(jié)輸出流轉(zhuǎn)換成字符輸出流字節(jié)輸出流轉(zhuǎn)換成字符輸出流Outpu
40、tStreamWriterpublic class OutputStreamWriter extends Writer public OutputStreamWriter(OutputStream out) /指定字節(jié)輸出流作為數(shù)據(jù)源,默認(rèn)字符集指定字節(jié)輸出流作為數(shù)據(jù)源,默認(rèn)字符集 public OutputStreamWriter(OutputStream out, Charset charset) /charset指定字符集指定字符集 public String getEncoding() /返回字符集名返回字符集名 實(shí)現(xiàn)數(shù)據(jù)在字節(jié)和不同編碼集中進(jìn)行轉(zhuǎn)換。實(shí)現(xiàn)數(shù)據(jù)在字節(jié)和不同編碼集中進(jìn)行轉(zhuǎn)
41、換。8.3.3 文件字符流文件字符流1.FileReader類類public class FileReader extends InputStreamReader public FileReader(String fileName) /構(gòu)造方法構(gòu)造方法 public FileReader(File file);讀文件的方法在讀文件的方法在InputStreamReader中實(shí)現(xiàn)中實(shí)現(xiàn)442. FileWriter類類public class FileWriter extends OutputStreamWriter public FileWriter(String fileName) /構(gòu)造方
42、法構(gòu)造方法 public FileWriter(String fileName, boolean append) ; public FileWriter(File file) ; public FileWriter(File file, boolean append) ;寫文件的方法在寫文件的方法在OutputStreamWriter中實(shí)現(xiàn)中實(shí)現(xiàn)45 FileWrite寫的文件是寫的文件是ASCII可讀的。可讀的。8.3.4 緩沖字符流緩沖字符流1.BufferedReader類類public class BufferedReader extends Reader public Buffere
43、dReader(Reader in) /構(gòu)造方法構(gòu)造方法 public String readLine() throws IOException /讀取一行字符串,輸入流結(jié)束時(shí)返回讀取一行字符串,輸入流結(jié)束時(shí)返回null2.BufferedWriter類類public class BufferedWriter extends Writer public BufferedWriter(Writer out) /構(gòu)造方法構(gòu)造方法 public BufferedWriter(Writer out, int sz) /sz指定字符緩沖區(qū)長(zhǎng)度指定字符緩沖區(qū)長(zhǎng)度 public void newLine()
44、 throws IOException /寫入一個(gè)換行符寫入一個(gè)換行符46FileReader按字符操作,效率低【例8.6】 將Fibonacci序列值寫入文本文件。8.3.5 格式化字符格式化字符輸出流輸出流 public class PrintWriter extends Writer public PrintWriter(OutputStream out, boolean autoFlush) /autoFlush指定是否立即傳輸,默認(rèn)指定是否立即傳輸,默認(rèn)false public void print(boolean bool) /輸出輸出boolean取值取值true或或false
45、public void print(char ch) public void print(int i) /將整數(shù)將整數(shù)i的取值轉(zhuǎn)換成字符串輸出的取值轉(zhuǎn)換成字符串輸出 public void print(long l) public void print(float f) public void print(double d) public void print(char s) public void print(String s) public void print(Object obj) /默認(rèn)調(diào)用默認(rèn)調(diào)用obj.toString()方法方法 public void println() /自
46、動(dòng)追加回車換行符,其他重載方法參數(shù)同上自動(dòng)追加回車換行符,其他重載方法參數(shù)同上 public PrintWriter format(String format, Object. args) . PrintWriter支持格式化的輸出,從支持格式化的輸出,從API幫助可以看出比幫助可以看出比BufferWriter功能更多。功能更多。8.4 文件操作文件操作8.4.1 文件操作類文件操作類8.4.2 文件過(guò)濾器接口文件過(guò)濾器接口8.4.3 文件對(duì)話框組件文件對(duì)話框組件8.4.4 隨機(jī)存取文件類隨機(jī)存取文件類488.4.1 文件操作類文件操作類1.File類的構(gòu)造方法類的構(gòu)造方法public cl
47、ass File extends Object implements Serializable, Comparable public File(String pathname) public File(String parent, String child) public File(File parent, String child)例如,例如,F(xiàn)ile file = new File(myfile.txt); File dir = new File(.,); /創(chuàng)建一個(gè)目錄文件對(duì)象,表示當(dāng)前目錄創(chuàng)建一個(gè)目錄文件對(duì)象,表示當(dāng)前目錄 File dir = new File(C:,); 492.
48、File類提供的方法類提供的方法1. 訪問(wèn)文件對(duì)象方法訪問(wèn)文件對(duì)象方法public String getName() /返回文件名,不包含路徑名返回文件名,不包含路徑名public String getPath() /返回相對(duì)路徑名,包含文件名返回相對(duì)路徑名,包含文件名public String getAbsolutePath() /返回絕對(duì)路徑名,包含文件名返回絕對(duì)路徑名,包含文件名public String getParent() /返回父文件對(duì)象的路徑名返回父文件對(duì)象的路徑名public File getParentFile() /返回父文件對(duì)象返回父文件對(duì)象2. 獲得或設(shè)置文件屬性獲得
49、或設(shè)置文件屬性 public long lastModified() /文件最后一次被修改的時(shí)間文件最后一次被修改的時(shí)間 public boolean setReadOnly() /設(shè)置文件只讀設(shè)置文件只讀3. 文件操作文件操作方法方法 public boolean createNewFile() /創(chuàng)建新文件創(chuàng)建新文件4. 目錄操作方法目錄操作方法 public boolean mkdir() /創(chuàng)建目錄創(chuàng)建目錄【例例】當(dāng)前目錄及子目錄的文件列表當(dāng)前目錄及子目錄的文件列表 。508.4.2 文件過(guò)濾器接口文件過(guò)濾器接口1.FileFilter和和FilenameFilter接口接口publi
50、c interface FileFilter public boolean accept(File pathname)public interface FilenameFilter public boolean accept(File dir, String name)2.獲得文件列表時(shí)使用過(guò)濾器獲得文件列表時(shí)使用過(guò)濾器public String list(FilenameFilter filter) /過(guò)濾顯示文件清單過(guò)濾顯示文件清單public File listFiles(FilenameFilter filter)public File listFiles(FileFilter fil
51、ter)【例例8.8】 帶過(guò)濾器的文件名列表。帶過(guò)濾器的文件名列表。51文件過(guò)濾器接口文件過(guò)濾器接口這些實(shí)例過(guò)濾這些實(shí)例過(guò)濾 File 類的類的 list 方法中的目錄清單。方法中的目錄清單。即即FilenameFilter的的accept方法會(huì)在調(diào)用方法會(huì)在調(diào)用File類類的的list方法時(shí)自動(dòng)被調(diào)用。方法時(shí)自動(dòng)被調(diào)用。 FilenameFilter過(guò)濾文件名,過(guò)濾文件名,F(xiàn)ileFilter過(guò)過(guò)濾文件路徑。濾文件路徑。528.4.3 文件對(duì)話框組件文件對(duì)話框組件public class JFileChooser extends JComponent implements Accessibl
52、e public static final int APPROVE_OPTION = 0; /單擊單擊“打開打開”或或“保存保存”按鈕按鈕 public static final int CANCEL_OPTION = 1; /單擊單擊“撤消撤消”按鈕按鈕 public static final int ERROR_OPTION = -1; /出錯(cuò)出錯(cuò) public JFileChooser() public JFileChooser(String currentDirectoryPath) /初始路徑初始路徑 public JFileChooser(File currentDirectory
53、) public void setFileFilter(FileFilter filter) /設(shè)置文件過(guò)濾器設(shè)置文件過(guò)濾器 public int showOpenDialog(Component parent) throws HeadlessException /顯示打開文件對(duì)話框顯示打開文件對(duì)話框 public int showSaveDialog(Component parent) throws HeadlessException /顯示保存文件對(duì)話框顯示保存文件對(duì)話框 public File getSelectedFile() /返回選中文件返回選中文件532. JFileChoose
54、r的文件過(guò)濾器的文件過(guò)濾器public abstract class FileFilter extends Object public abstract boolean accept(File f) /過(guò)濾操作,過(guò)濾操作,f指定待過(guò)濾文件指定待過(guò)濾文件 public abstract String getDescription() /文件類型描述字符串文件類型描述字符串【例例8.9】 文本文件編輯器。文本文件編輯器。548.4.4 隨機(jī)存取文件類隨機(jī)存取文件類public class RandomAccessFile extends Object implements DataOutput,
55、DataInput, Closeable public RandomAccessFile(String name, String mode) throws FileNotFoundException public RandomAccessFile(File file, String mode) throws FileNotFoundException public final int readInt() throws IOException /讀一個(gè)整數(shù)類型值,當(dāng)讀到文件尾時(shí),拋出讀一個(gè)整數(shù)類型值,當(dāng)讀到文件尾時(shí),拋出EOFException異常異常 public final void wri
56、teInt(int v) throws IOException /寫入一個(gè)整型值寫入一個(gè)整型值 public long length() throws IOException /返回文件長(zhǎng)度返回文件長(zhǎng)度 public long getFilePointer() throws IOException /獲取文件指針位置獲取文件指針位置 public void seek(long pos) throws IOException /設(shè)置文件指針位置設(shè)置文件指針位置 public void close() throws IOException /關(guān)閉文件關(guān)閉文件 【例例8.11】 在文件中添加不重復(fù)數(shù)據(jù)。在文件中添加不重復(fù)數(shù)據(jù)。55總結(jié)總結(jié)目的:目的:使用流和文件操作。使用流和文件操作。要求:要求:(1)掌握字節(jié)流和字符流的功能和使用方法;)掌握字節(jié)流和字符流的功能和使用方法;(2)掌握文件操作的基本方法。)掌握文件操作的基本方法。重點(diǎn):重點(diǎn):(1)熟悉流在文件操作中的作用;)熟悉流在文件操作中的作用;(2)掌握對(duì)文件操作的)掌握對(duì)文件操作的File類;類;(3)理解文件過(guò)濾器、文件對(duì)話框和隨機(jī)存?。├斫馕募^(guò)濾器、文件對(duì)話框和隨機(jī)存取文件
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年三方買賣房屋合同模板(三篇)
- 公司與勞務(wù)公司合同3
- 2025餐飲特許區(qū)域代理合同
- 個(gè)人地下車位租賃合同
- 工藝品購(gòu)銷合同
- 動(dòng)物用藥銷售合同
- 地下室施工合同
- 2025草皮買賣合同范本
- 2025關(guān)于雜志廣告合同的樣本2
- 2025土地承包合同樣文
- 加強(qiáng)教師隊(duì)伍建設(shè)教師領(lǐng)域?qū)W習(xí)二十屆三中全會(huì)精神專題課
- 2024-2025學(xué)年人教版數(shù)學(xué)七年級(jí)上冊(cè)期末復(fù)習(xí)卷(含答案)
- 2024年決戰(zhàn)行測(cè)5000題言語(yǔ)理解與表達(dá)(培優(yōu)b卷)
- 四年級(jí)數(shù)學(xué)上冊(cè)人教版24秋《小學(xué)學(xué)霸單元期末標(biāo)準(zhǔn)卷》考前專項(xiàng)沖刺訓(xùn)練
- 2025年慢性阻塞性肺疾病全球創(chuàng)議GOLD指南修訂解讀課件
- (完整版)減數(shù)分裂課件
- 銀行辦公大樓物業(yè)服務(wù)投標(biāo)方案投標(biāo)文件(技術(shù)方案)
- 第01講 直線的方程(九大題型)(練習(xí))
- 微粒貸逾期還款協(xié)議書范本
- 人教版七年級(jí)上冊(cè)數(shù)學(xué)全冊(cè)課時(shí)練習(xí)帶答案
- NBT 47013.4-2015 承壓設(shè)備無(wú)損檢測(cè) 第4部分:磁粉檢測(cè)
評(píng)論
0/150
提交評(píng)論