第09章輸入輸出流和文件操作(修改2縮減)_第1頁(yè)
第09章輸入輸出流和文件操作(修改2縮減)_第2頁(yè)
第09章輸入輸出流和文件操作(修改2縮減)_第3頁(yè)
第09章輸入輸出流和文件操作(修改2縮減)_第4頁(yè)
第09章輸入輸出流和文件操作(修改2縮減)_第5頁(yè)
已閱讀5頁(yè),還剩46頁(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、第第9 9章章 輸入輸出流和文件操作輸入輸出流和文件操作流的基本概念流的基本概念流類(lèi)流類(lèi)nInputStream抽象字節(jié)輸入流類(lèi)抽象字節(jié)輸入流類(lèi)nOuputStream 抽象字節(jié)輸出流類(lèi)抽象字節(jié)輸出流類(lèi)nReader抽象字符輸入流類(lèi)抽象字符輸入流類(lèi)nWriter抽象字符輸出流類(lèi)抽象字符輸出流類(lèi)文件操作類(lèi)文件操作類(lèi)nFile文件類(lèi)文件類(lèi)nRandomAccessFile 隨機(jī)存取文件類(lèi)隨機(jī)存取文件類(lèi)第第9 9章章 本章主要內(nèi)容本章主要內(nèi)容流的基本概念流的基本概念n流(流(stream)是指一組有順序、有起點(diǎn)和終點(diǎn)的字節(jié)集合,是指一組有順序、有起點(diǎn)和終點(diǎn)的字節(jié)集合,是對(duì)是對(duì)數(shù)據(jù)傳輸數(shù)據(jù)傳輸?shù)目偡Q(chēng)或

2、抽象。數(shù)據(jù)在兩個(gè)對(duì)象之間的傳輸稱(chēng)的總稱(chēng)或抽象。數(shù)據(jù)在兩個(gè)對(duì)象之間的傳輸稱(chēng)為為流流。n流的方向流的方向:數(shù)據(jù)由外部輸入設(shè)備流向內(nèi)存的過(guò)程稱(chēng)為數(shù)據(jù)輸數(shù)據(jù)由外部輸入設(shè)備流向內(nèi)存的過(guò)程稱(chēng)為數(shù)據(jù)輸入;由內(nèi)存流向外部輸出設(shè)備的過(guò)程稱(chēng)為數(shù)據(jù)輸出。因此,入;由內(nèi)存流向外部輸出設(shè)備的過(guò)程稱(chēng)為數(shù)據(jù)輸出。因此,從程序所在的內(nèi)存角度看,流入內(nèi)存的為從程序所在的內(nèi)存角度看,流入內(nèi)存的為輸入流輸入流,流出內(nèi)存,流出內(nèi)存的為的為輸出流輸出流。n流的基本操作流的基本操作:讀和寫(xiě)讀和寫(xiě)。從流中取得數(shù)據(jù)的操作稱(chēng)為讀;向。從流中取得數(shù)據(jù)的操作稱(chēng)為讀;向流中添加數(shù)據(jù)的操作稱(chēng)為寫(xiě)。流中添加數(shù)據(jù)的操作稱(chēng)為寫(xiě)。輸入流只能進(jìn)行讀;輸出流只輸

3、入流只能進(jìn)行讀;輸出流只能進(jìn)行寫(xiě)。能進(jìn)行寫(xiě)。流的基本概念流的基本概念在程序代碼中,用輸入流從外部設(shè)備中讀取數(shù)據(jù)到內(nèi)存;用輸在程序代碼中,用輸入流從外部設(shè)備中讀取數(shù)據(jù)到內(nèi)存;用輸出流將內(nèi)存數(shù)據(jù)寫(xiě)到外部設(shè)備中。出流將內(nèi)存數(shù)據(jù)寫(xiě)到外部設(shè)備中。 不同的外部設(shè)備對(duì)應(yīng)不同不同的外部設(shè)備對(duì)應(yīng)不同的流類(lèi)。的流類(lèi)。 程序代碼(內(nèi)存中)程序代碼(內(nèi)存中)輸入流輸入流輸出流輸出流鍵盤(pán)顯示器打印機(jī)文件文件讀取寫(xiě)入標(biāo)準(zhǔn)輸入流標(biāo)準(zhǔn)輸入流標(biāo)準(zhǔn)輸出流標(biāo)準(zhǔn)輸出流文件輸入流文件輸入流文件輸出流文件輸出流流的基本概念流的基本概念 流采用緩沖區(qū)技術(shù):對(duì)流進(jìn)行讀流采用緩沖區(qū)技術(shù):對(duì)流進(jìn)行讀/寫(xiě)操作,一次只能讀寫(xiě)操作,一次只能讀/寫(xiě)一寫(xiě)

4、一個(gè)字節(jié),數(shù)據(jù)傳輸效率低。為提高效率,將一塊內(nèi)存空間設(shè)個(gè)字節(jié),數(shù)據(jù)傳輸效率低。為提高效率,將一塊內(nèi)存空間設(shè)計(jì)成緩沖區(qū)。配備緩沖區(qū)的流稱(chēng)為計(jì)成緩沖區(qū)。配備緩沖區(qū)的流稱(chēng)為緩沖流緩沖流。n當(dāng)當(dāng)向流寫(xiě)入數(shù)據(jù)向流寫(xiě)入數(shù)據(jù)時(shí),數(shù)據(jù)被發(fā)送到緩沖區(qū),當(dāng)緩沖區(qū)滿時(shí),時(shí),數(shù)據(jù)被發(fā)送到緩沖區(qū),當(dāng)緩沖區(qū)滿時(shí),系統(tǒng)將數(shù)據(jù)全部發(fā)送到相應(yīng)的設(shè)備。如果在此之前要傳輸系統(tǒng)將數(shù)據(jù)全部發(fā)送到相應(yīng)的設(shè)備。如果在此之前要傳輸數(shù)據(jù),可以使用數(shù)據(jù),可以使用flush()操作;操作;n當(dāng)當(dāng)從流讀取數(shù)據(jù)從流讀取數(shù)據(jù)時(shí),系統(tǒng)實(shí)際從緩沖區(qū)讀。當(dāng)緩沖區(qū)空時(shí),時(shí),系統(tǒng)實(shí)際從緩沖區(qū)讀。當(dāng)緩沖區(qū)空時(shí),系統(tǒng)就從相關(guān)設(shè)備自動(dòng)讀取數(shù)據(jù)充滿緩沖區(qū)。系統(tǒng)就從相關(guān)設(shè)

5、備自動(dòng)讀取數(shù)據(jù)充滿緩沖區(qū)。流的基本概念流的基本概念 java.io包中的數(shù)據(jù)流包中的數(shù)據(jù)流n字節(jié)流:以字節(jié)流:以字節(jié)字節(jié)作為流中元素的基本類(lèi)型。作為流中元素的基本類(lèi)型。n字符流:以字符流:以字符字符作為流中元素的基本類(lèi)型。作為流中元素的基本類(lèi)型。nInputStream抽象的抽象的字節(jié)字節(jié)輸入輸入流根類(lèi)流根類(lèi)nOuputStream抽象的抽象的字節(jié)字節(jié)輸出輸出流根類(lèi)流根類(lèi)nReader抽象的抽象的字符字符輸入輸入流根類(lèi)流根類(lèi)Writer抽象的抽象的字符字符輸出輸出流根類(lèi)流根類(lèi)9.2 9.2 字節(jié)輸入字節(jié)輸入/ /輸出流類(lèi)輸出流類(lèi)9.2.1 抽象字節(jié)流抽象字節(jié)流9.2.2 Java標(biāo)準(zhǔn)輸入標(biāo)準(zhǔn)輸

6、入/輸出輸出9.2.3 文件字節(jié)流文件字節(jié)流9.2.4 數(shù)據(jù)字節(jié)流數(shù)據(jù)字節(jié)流9.2.5 對(duì)象字節(jié)流對(duì)象字節(jié)流字節(jié)流字節(jié)流n字節(jié)輸入流類(lèi)字節(jié)輸入流類(lèi)InputStream :所有面向字節(jié)的輸入流超類(lèi)。:所有面向字節(jié)的輸入流超類(lèi)。public abstract class InputStream extends Object implements Closeable public abstract int read() throws IOException; /返回讀取的一個(gè)字節(jié),抽象方法返回讀取的一個(gè)字節(jié),抽象方法 public int read(byte b) throws IOExcepti

7、on /讀取若干字節(jié)到指定緩沖區(qū)讀取若干字節(jié)到指定緩沖區(qū)b,返回實(shí)際讀取的字節(jié)數(shù),返回實(shí)際讀取的字節(jié)數(shù) public void close() throws IOException /關(guān)閉輸入流關(guān)閉輸入流 InputStream類(lèi)的子類(lèi)字節(jié)流字節(jié)流n字節(jié)輸出流類(lèi)字節(jié)輸出流類(lèi)OutputStream:所有面向字節(jié)的輸出流超類(lèi)。:所有面向字節(jié)的輸出流超類(lèi)。public abstract class OutputStream extends Object implements Closeable, Flushable public abstract void write(int b) throws

8、IOException; /寫(xiě)入一個(gè)字節(jié),抽象方法寫(xiě)入一個(gè)字節(jié),抽象方法 public void write(byte b) throws IOException/將緩沖區(qū)中的若干字節(jié)寫(xiě)入輸出流將緩沖區(qū)中的若干字節(jié)寫(xiě)入輸出流 public void flush() throws IOException /立即傳輸立即傳輸 public void close() throws IOException /關(guān)閉輸出流關(guān)閉輸出流OutputStream類(lèi)的子類(lèi)字節(jié)流字節(jié)流1、字節(jié)輸入流、字節(jié)輸入流InputStream類(lèi)類(lèi) :所有面向字節(jié)的輸:所有面向字節(jié)的輸入流的超類(lèi)。入流的超類(lèi)。2、字節(jié)輸出流、字

9、節(jié)輸出流OutputStream類(lèi):所有面向字節(jié)的類(lèi):所有面向字節(jié)的輸出流的超類(lèi)。輸出流的超類(lèi)。 字節(jié)流相關(guān)內(nèi)容:字節(jié)流相關(guān)內(nèi)容:標(biāo)準(zhǔn)輸入標(biāo)準(zhǔn)輸入/ /輸出流輸出流文件字節(jié)流文件字節(jié)流數(shù)據(jù)字節(jié)流數(shù)據(jù)字節(jié)流對(duì)象字節(jié)流對(duì)象字節(jié)流9.2.2 Java9.2.2 Java標(biāo)準(zhǔn)輸入標(biāo)準(zhǔn)輸入/ /輸出輸出n標(biāo)準(zhǔn)輸入標(biāo)準(zhǔn)輸入/輸出常量輸出常量public final class System extends Object public final static InputStream in /標(biāo)準(zhǔn)輸入常量標(biāo)準(zhǔn)輸入常量 public final static PrintStream out /標(biāo)準(zhǔn)輸出常量標(biāo)準(zhǔn)

10、輸出常量 public final static PrintStream err/標(biāo)準(zhǔn)錯(cuò)誤輸出常量標(biāo)準(zhǔn)錯(cuò)誤輸出常量System.in是是InputStream類(lèi)的常量對(duì)象,調(diào)用類(lèi)的常量對(duì)象,調(diào)用read()方法可方法可以從鍵盤(pán)接收數(shù)據(jù);以從鍵盤(pán)接收數(shù)據(jù);System.out是是PrintStream類(lèi)的常量對(duì)象,調(diào)用類(lèi)的常量對(duì)象,調(diào)用print()和和println()方法可以向顯示器輸出數(shù)據(jù)。方法可以向顯示器輸出數(shù)據(jù)。 nPrintStream類(lèi)類(lèi)public class PrintStream extends FilterOutputStream public void print(boo

11、lean b) public void print(char c) public void print(long l) public void print(int i) public void print(float f) public void print(double d) public void print(String s) public void print(Object obj) public void println()9.2.2 Java9.2.2 Java標(biāo)準(zhǔn)輸入標(biāo)準(zhǔn)輸入/ /輸出輸出 【例9.1】 標(biāo)準(zhǔn)輸入/輸出圖圖9.5 標(biāo)準(zhǔn)輸入過(guò)程標(biāo)準(zhǔn)輸入過(guò)程 輸入”abc123”鍵盤(pán)

12、標(biāo)準(zhǔn)輸入流程序讀取標(biāo)準(zhǔn)輸入流System.in.read()對(duì)字節(jié)數(shù)組進(jìn)行操作01234567851197 98 99 49 50 51 13 10字節(jié)數(shù)組buffer實(shí)際讀入8 個(gè)字節(jié)System.in.read()會(huì)拋出異常abc123對(duì)應(yīng)字符顯示器程序System.out.println(count=+count);99111 117 110 11661561310不會(huì)拋出異常寫(xiě)入coun標(biāo)準(zhǔn)輸出流對(duì)應(yīng)字符緩沖區(qū)t=8圖圖9.6 標(biāo)準(zhǔn)輸出過(guò)程標(biāo)準(zhǔn)輸出過(guò)程9.2.3 9.2.3 文件字節(jié)流文件字節(jié)流1、文件字節(jié)輸入流文件字節(jié)輸入流(FileInputStream)用于用于從文件讀數(shù)據(jù)從文件

13、讀數(shù)據(jù)。構(gòu)造方法構(gòu)造方法npublic FileInputStream (String name) throws FileNotFoundExceptionnpublic FileInputStream (File file) throws FileNotFoundException讀取字節(jié)的方法讀取字節(jié)的方法npublic int read() throws IOExceptionnpublic int read(byte b) throws IOExceptionnpublic int read(byte b ,int off , int len) throws IOException關(guān)閉

14、輸入流關(guān)閉輸入流npublic void close() throws IOException例子:例子:FileInputStream fin = new FileInputStream (“文件文件1”); /創(chuàng)建創(chuàng)建“文件文件1”的輸入流對(duì)象的輸入流對(duì)象count = fin.read(buffer); /從文件從文件1中讀取的數(shù)據(jù)放入數(shù)組中讀取的數(shù)據(jù)放入數(shù)組buffer中,中, count中是返回讀出中是返回讀出的字節(jié)數(shù),當(dāng)返回的字節(jié)數(shù),當(dāng)返回-1時(shí)文件讀完。時(shí)文件讀完。fin.close(); /關(guān)閉輸入流關(guān)閉輸入流9.2.3 9.2.3 文件字節(jié)流文件字節(jié)流2、文件字節(jié)輸出流、文件

15、字節(jié)輸出流(FileOutputStream)用于用于向文件寫(xiě)數(shù)據(jù)向文件寫(xiě)數(shù)據(jù)。構(gòu)造方法構(gòu)造方法npublic FileOutputStream (String name) throws FileNotFoundExceptionnpublic FileOutputStream (File file) throws FileNotFoundExceptionnpublic FileOutputStream (String name, Boolean append) throws FileNotFoundException寫(xiě)入字節(jié)的方法寫(xiě)入字節(jié)的方法npublic int write(int b

16、) throws IOException npublic int write (byte b) throws IOException npublic int write (byte b ,int off , int len) throws IOException 關(guān)閉輸出流關(guān)閉輸出流npublic void close() throws IOException例子:例子: FileOutputStream fout = new FileOutputStream(“文件文件1”); /創(chuàng)建創(chuàng)建“文件文件1”的輸出流對(duì)象的輸出流對(duì)象 fout.write(buffer); /將將buffer數(shù)組中

17、的數(shù)據(jù)寫(xiě)入輸出流,即寫(xiě)入到文件中。數(shù)組中的數(shù)據(jù)寫(xiě)入輸出流,即寫(xiě)入到文件中。 fout.close(); /關(guān)閉輸出流關(guān)閉輸出流9.2.3 9.2.3 文件字節(jié)流文件字節(jié)流append:默認(rèn):默認(rèn)falsentrue為添加方式,數(shù)據(jù)添加在原文件的末尾為添加方式,數(shù)據(jù)添加在原文件的末尾nfalse為重寫(xiě)方式,數(shù)據(jù)從原文件開(kāi)始處寫(xiě)入,為重寫(xiě)方式,數(shù)據(jù)從原文件開(kāi)始處寫(xiě)入,覆蓋文件中原有的數(shù)據(jù)。覆蓋文件中原有的數(shù)據(jù)。讀文件時(shí)讀文件時(shí)指定文件不存在,拋出異常;指定文件不存在,拋出異常;寫(xiě)文件時(shí)寫(xiě)文件時(shí)指定文件不存在,則創(chuàng)建一個(gè)新文件寫(xiě)指定文件不存在,則創(chuàng)建一個(gè)新文件寫(xiě)入數(shù)據(jù)。入數(shù)據(jù)。9.2.3 9.2.3

18、 文件字節(jié)流文件字節(jié)流 【例例9.2】 使用文件字節(jié)輸入使用文件字節(jié)輸入/輸出流輸出流實(shí)現(xiàn)文件的輸入實(shí)現(xiàn)文件的輸入/輸出操作。輸出操作。n文件輸入操作文件輸入操作n文件輸出操作文件輸出操作n文件復(fù)制操作文件復(fù)制操作 9.2.4 9.2.4 數(shù)據(jù)字節(jié)流數(shù)據(jù)字節(jié)流 數(shù)據(jù)流允許程序按與機(jī)器無(wú)關(guān)的風(fēng)格讀取或?qū)憯?shù)據(jù)流允許程序按與機(jī)器無(wú)關(guān)的風(fēng)格讀取或?qū)懭霐?shù)據(jù)。可以讀取或?qū)懭肴魏稳霐?shù)據(jù)??梢宰x取或?qū)懭肴魏蜫ava類(lèi)型數(shù)據(jù)。類(lèi)型數(shù)據(jù)。數(shù)據(jù)輸入流數(shù)據(jù)輸入流DataInputStream數(shù)據(jù)輸出流數(shù)據(jù)輸出流DataOutputStream以前只能寫(xiě)字節(jié)數(shù)據(jù)以前只能寫(xiě)字節(jié)數(shù)據(jù)現(xiàn)在任何現(xiàn)在任何JAVAJAVA數(shù)據(jù)數(shù)據(jù)

19、類(lèi)型的數(shù)據(jù)都能寫(xiě)類(lèi)型的數(shù)據(jù)都能寫(xiě)了!了!數(shù)據(jù)字節(jié)流是在字節(jié)流的基礎(chǔ)上對(duì)數(shù)據(jù)進(jìn)行加工!數(shù)據(jù)字節(jié)流是在字節(jié)流的基礎(chǔ)上對(duì)數(shù)據(jù)進(jìn)行加工!真正進(jìn)行傳輸?shù)倪€是字節(jié)流!真正進(jìn)行傳輸?shù)倪€是字節(jié)流!9.2.4 9.2.4 數(shù)據(jù)字節(jié)流數(shù)據(jù)字節(jié)流nDataInputStream類(lèi)類(lèi)public class DataInputStream extends FilterInputStream implements DataInput public DataInputStream(InputStream in) /構(gòu)造方法構(gòu)造方法 public final short readShort() throws IOExcep

20、tion public final byte readByte() throws IOException public final int readInt() throws IOException /讀取一個(gè)整型讀取一個(gè)整型 public final long readLong() throws IOException public final float readFloat() throws IOException public final double readDouble() throws IOException public final char readChar() throws I

21、OException /讀取一個(gè)字符讀取一個(gè)字符 public final boolean readBoolean() throws IOException 當(dāng)輸入流結(jié)束時(shí),拋出當(dāng)輸入流結(jié)束時(shí),拋出EOFException異常;異常;發(fā)生發(fā)生I/O錯(cuò)誤時(shí),拋出錯(cuò)誤時(shí),拋出IOEception異常。異常。FileInputStream fin = new FileInputStream (“文件文件1”); /創(chuàng)建創(chuàng)建“文件文件1”的輸入流對(duì)象的輸入流對(duì)象DataInputStream din = new DataInputStream(fin);int arrInt = din.readInt

22、();/從從“文件文件1”中讀取一個(gè)中讀取一個(gè)int類(lèi)型數(shù)據(jù)放入類(lèi)型數(shù)據(jù)放入arrInt變量中。變量中。din.close();fin.close(); /關(guān)閉輸入流關(guān)閉輸入流9.2.4 9.2.4 數(shù)據(jù)字節(jié)流數(shù)據(jù)字節(jié)流nDataOutputStream類(lèi)類(lèi)public class DataOutputStream extends FilterOutputStream implements DataOutput public DataOutputStream(OutputStream out) /構(gòu)造方法構(gòu)造方法 public final void writeByte(int v) throw

23、s IOException public final void writeShort(int v) throws IOException public final void writeInt(int v) throws IOException /寫(xiě)入一個(gè)整型寫(xiě)入一個(gè)整型 public final void writeLong(long v) throws IOException public final void writeFloat(float v) throws IOException public final void writeDouble(double v) throws IOExc

24、eption public final void writeChar(int v) throws IOException /寫(xiě)入一個(gè)字符寫(xiě)入一個(gè)字符 public final void writeBoolean(boolean v) throws IOException public final void writeChars(String s) throws IOException public final int size() /返回實(shí)際寫(xiě)入的字節(jié)數(shù)返回實(shí)際寫(xiě)入的字節(jié)數(shù) FileOutputStream fout = new FileOutputStream(“文件文件1”); /創(chuàng)建創(chuàng)建

25、“文件文件1”的輸出流對(duì)象的輸出流對(duì)象 DataOutputStream dout = new DataOutputStream(fout); dout.writeInt(arrInt); /將將int 類(lèi)型變量類(lèi)型變量arrInt中的數(shù)據(jù)寫(xiě)入輸出流,即寫(xiě)入到文件中。中的數(shù)據(jù)寫(xiě)入輸出流,即寫(xiě)入到文件中。 dout.close(); fout.close(); /關(guān)閉輸出流關(guān)閉輸出流9.2.4 9.2.4 數(shù)據(jù)字節(jié)流數(shù)據(jù)字節(jié)流【例例9.3】 將將Fibonacci序列值寫(xiě)入一個(gè)整序列值寫(xiě)入一個(gè)整數(shù)類(lèi)型文件中。數(shù)類(lèi)型文件中。n數(shù)據(jù)寫(xiě)入文件的思路同標(biāo)準(zhǔn)輸出數(shù)據(jù)寫(xiě)入文件的思路同標(biāo)準(zhǔn)輸出n捕獲異??刂戚?/p>

26、入結(jié)束捕獲異??刂戚斎虢Y(jié)束 9.2.5 9.2.5 對(duì)象字節(jié)流對(duì)象字節(jié)流 對(duì)象流可以對(duì)象流可以直接寫(xiě)入或讀取一個(gè)對(duì)象直接寫(xiě)入或讀取一個(gè)對(duì)象。對(duì)。對(duì)象流分為:象流分為:n對(duì)象輸入流對(duì)象輸入流ObjectInputStream;n對(duì)象輸出流對(duì)象輸出流ObjectOutputStream。 它們必須它們必須建立在其他流之上建立在其他流之上。傳輸?shù)年P(guān)鍵是把。傳輸?shù)年P(guān)鍵是把有特殊結(jié)構(gòu)的有特殊結(jié)構(gòu)的對(duì)象進(jìn)行序列化對(duì)象進(jìn)行序列化,然后通過(guò)其他,然后通過(guò)其他流來(lái)進(jìn)行傳輸。流來(lái)進(jìn)行傳輸。9.2.5 9.2.5 對(duì)象字節(jié)流對(duì)象字節(jié)流n對(duì)象輸入流對(duì)象輸入流ObjectInputStream:用于恢復(fù)那些序列化:用于

27、恢復(fù)那些序列化的對(duì)象。的對(duì)象。構(gòu)造方法:構(gòu)造方法: public ObjectInputStream(InputStream in) throws IOException,StreamCorruptedException實(shí)例方法:實(shí)例方法: Public final Object readObject() throws OptionalDataException,ClassNotFoundException,IOException 讀取時(shí),需要將其強(qiáng)制轉(zhuǎn)換為期望的類(lèi)型。讀取時(shí),需要將其強(qiáng)制轉(zhuǎn)換為期望的類(lèi)型。 FileInputStream fin = new FileInputStream (

28、“文件文件1”); /創(chuàng)建創(chuàng)建“文件文件1”的輸入流對(duì)象的輸入流對(duì)象ObjectInputStream din = new ObjectInputStream (fin);arrInt = (強(qiáng)制類(lèi)型轉(zhuǎn)換強(qiáng)制類(lèi)型轉(zhuǎn)換)din.readObject();/從文件從文件1中讀取一個(gè)對(duì)象數(shù)據(jù)放入對(duì)象變量中讀取一個(gè)對(duì)象數(shù)據(jù)放入對(duì)象變量arrInt中。中。din.close();fin.close(); /關(guān)閉輸入流關(guān)閉輸入流9.2.5 9.2.5 對(duì)象字節(jié)流對(duì)象字節(jié)流n對(duì)象輸出流對(duì)象輸出流ObjectOutputStream:將:將 Java 對(duì)象的基本數(shù)對(duì)象的基本數(shù)據(jù)類(lèi)型寫(xiě)入據(jù)類(lèi)型寫(xiě)入 Output

29、Stream。構(gòu)造方法:構(gòu)造方法:public ObjectOutputStream(OutputStream Out) throws IOException實(shí)例方法:實(shí)例方法:Public final void writeObject (Object obj) throws IOException FileOutputStream fout = new FileOutputStream(“文件文件1”); /創(chuàng)建創(chuàng)建“文件文件1”的輸出流對(duì)象的輸出流對(duì)象 ObjectOutputStream dout = new ObjectOutputStream (fout); dout. writeO

30、bject(arrInt); /將對(duì)象將對(duì)象arrInt寫(xiě)入輸出流,即寫(xiě)入到文件中。寫(xiě)入輸出流,即寫(xiě)入到文件中。 dout.close(); fout.close(); /關(guān)閉輸出流關(guān)閉輸出流9.2.5 9.2.5 對(duì)象字節(jié)流對(duì)象字節(jié)流序列化與序列化與Serializable接口接口n由于一個(gè)類(lèi)的對(duì)象包含多種信息,為了保證從對(duì)象流中能夠讀由于一個(gè)類(lèi)的對(duì)象包含多種信息,為了保證從對(duì)象流中能夠讀取到正確的對(duì)象,要求所有寫(xiě)入對(duì)象流的對(duì)象都必須是取到正確的對(duì)象,要求所有寫(xiě)入對(duì)象流的對(duì)象都必須是序列化序列化的對(duì)象的對(duì)象。n一個(gè)類(lèi)如果實(shí)現(xiàn)了序列化一個(gè)類(lèi)如果實(shí)現(xiàn)了序列化Serializable接口,那么這個(gè)

31、類(lèi)的對(duì)接口,那么這個(gè)類(lèi)的對(duì)象就是象就是序列化的對(duì)象序列化的對(duì)象。nSerializable接口中沒(méi)有方法,因此實(shí)現(xiàn)該接口的類(lèi)不需要實(shí)接口中沒(méi)有方法,因此實(shí)現(xiàn)該接口的類(lèi)不需要實(shí)現(xiàn)額外的方法。一個(gè)序列化的子類(lèi)對(duì)象也是序列化的?,F(xiàn)額外的方法。一個(gè)序列化的子類(lèi)對(duì)象也是序列化的。n如果一個(gè)對(duì)象的成員變量是一個(gè)對(duì)象,那么這個(gè)對(duì)象的數(shù)據(jù)成如果一個(gè)對(duì)象的成員變量是一個(gè)對(duì)象,那么這個(gè)對(duì)象的數(shù)據(jù)成員也會(huì)被保存。員也會(huì)被保存。n如果一個(gè)可序列化的對(duì)象包含對(duì)某個(gè)不可序列化的對(duì)象的引用,如果一個(gè)可序列化的對(duì)象包含對(duì)某個(gè)不可序列化的對(duì)象的引用,那么整個(gè)序列化操作將會(huì)失敗,并且會(huì)拋出一個(gè)那么整個(gè)序列化操作將會(huì)失敗,并且會(huì)拋

32、出一個(gè)NotSerializableException。【例例9.49.4】 使用對(duì)象流將若干學(xué)生對(duì)象寫(xiě)入以對(duì)象為基本類(lèi)型的記錄式文件中使用對(duì)象流將若干學(xué)生對(duì)象寫(xiě)入以對(duì)象為基本類(lèi)型的記錄式文件中圖圖9.7 9.7 各種輸入各種輸入/ /輸出流及其讀輸出流及其讀/ /寫(xiě)方法寫(xiě)方法 字節(jié)數(shù)組buffer基本數(shù)據(jù)類(lèi)型變量i鍵盤(pán)文件輸入流顯示器文件對(duì)象objSystem.in.read(buffer)DataInputStreamreadInt()ObjectInputStreamreadObject()FileInputStreamread(buffer)FileInputStream輸出流Syst

33、em.out.print(i)ObjectInputStreamwriteObject(obj)FileOutputStreamwrite(buffer)FileOutputStreamSystem.out.print(obj.toString()DataOutputStreamwriteInt(i)9.3 9.3 字符輸入字符輸入/ /輸出流類(lèi)輸出流類(lèi)9.3.1 抽象字符流抽象字符流9.3.2 文件字符流文件字符流9.3.3 緩沖字符流緩沖字符流9.3.1 9.3.1 抽象字符流抽象字符流1.字符輸入流字符輸入流Reader 為所有面向字符的輸入流的超類(lèi)。聲明為為所有面向字符的輸入流的超類(lèi)。

34、聲明為java.io中中的抽象類(lèi)。的抽象類(lèi)。 public abstract class Reader extend Object2.字符輸出類(lèi)字符輸出類(lèi)Writer 為所有面向字符的輸出流的超類(lèi)。聲明為為所有面向字符的輸出流的超類(lèi)。聲明為java.io中中的抽象類(lèi)。的抽象類(lèi)。 public abstract class Writer extend Object 文件字符流文件字符流字符緩沖流字符緩沖流9.3.1 9.3.1 抽象字符流抽象字符流nReader類(lèi)類(lèi)public abstract class Reader extends Object implements Readable, C

35、loseable public int read() throws IOException public int read(char cbuf) throws IOException abstract public int read(char cbuf, int off, int len) throws IOException; abstract public void close() throws IOException;9.3.1 9.3.1 抽象字符流抽象字符流nWriter類(lèi)類(lèi)public abstract class Writer implements Appendable, Clo

36、seable, Flushable public void write(int c) throws IOException/c的低的低16位寫(xiě)入位寫(xiě)入 public void write(char cbuf) throws IOException public void write(char cbuf, int off,int len) throws IOException public void write(String str) throws IOException public void write(String str,int off,int len) throws IOExcepti

37、on public abstract void flush() throws IOException public abstract void close() throws IOException 9.3.2 9.3.2 文件字符流文件字符流n文件字符流文件字符流FileReader和和FileWriter類(lèi):類(lèi): 用于用于文件字符的輸入輸出文件字符的輸入輸出處理,與文件字節(jié)流類(lèi)處理,與文件字節(jié)流類(lèi)FileInputStream、FileOutputStream的功能相似。的功能相似。 FileReader文件字符輸入流:文件字符輸入流:npublic FileReader(File file

38、) throws FileNotFoundExceptionnpublic FileReader(String fileName) throws FileNotFoundExceptionnpublic int read() throws IOException npublic int read(char cbuf) throws IOException FileReader fin = new FileReader (“文件文件1”);/創(chuàng)建創(chuàng)建“文件文件1”的輸入流對(duì)象的輸入流對(duì)象fin.read(cbuf) ; /從文件字符輸入流中讀取到一個(gè)字符數(shù)組從文件字符輸入流中讀取到一個(gè)字符數(shù)組f

39、in.close();/關(guān)閉輸出流關(guān)閉輸出流9.3.2 9.3.2 文件字符流文件字符流n文件字符流文件字符流FileReader和和FileWriter類(lèi):類(lèi): 用于用于文件字符的輸入輸出文件字符的輸入輸出處理,與文件字節(jié)流類(lèi)處理,與文件字節(jié)流類(lèi)FileInputStream、FileOutputStream的功能相似。的功能相似。 FileWriter文件字符輸出流文件字符輸出流:npublic FileWriter(File file) throws IOExceptionnpublic FileWriter(String filename, Boolean append) throws

40、 IOExceptionnpublic void write(int c) throws IOExceptionnpublic void write(char cbuf) throws IOExceptionnpublic void write(String str) throws IOException /將字符串寫(xiě)入輸出流將字符串寫(xiě)入輸出流FileWriter fout = new FileWriter(“文件文件1”);/創(chuàng)建創(chuàng)建“文件文件1”的輸出流對(duì)象的輸出流對(duì)象fout.write(“abc); /向文件字符輸出流寫(xiě)入一個(gè)字符串向文件字符輸出流寫(xiě)入一個(gè)字符串fout.close()

41、;/關(guān)閉輸出流關(guān)閉輸出流9.3.3 9.3.3 緩沖字符流緩沖字符流n字符緩沖流字符緩沖流BufferedReader和和BufferedWriter類(lèi):類(lèi):字符緩沖輸入流字符緩沖輸入流BufferedReadernpublic BufferedReader(Reader in)npublic BufferedReader(Reader in, int sz) / sz緩沖區(qū)長(zhǎng)度緩沖區(qū)長(zhǎng)度npublic String readLine() throws IOException /讀取一行字符串,輸入流結(jié)束時(shí)返回讀取一行字符串,輸入流結(jié)束時(shí)返回null字符緩沖輸出流字符緩沖輸出流Buffered

42、Writer類(lèi)類(lèi)npublic BufferedWriter(Writer out)npublic BufferedWriter(Writer out, int sz) / sz緩沖區(qū)長(zhǎng)度緩沖區(qū)長(zhǎng)度npublic void newLine() throws IOException /寫(xiě)入換行符。寫(xiě)入換行符?!纠?.5】 將將Fibonacci序列值寫(xiě)入一個(gè)文本文件中。序列值寫(xiě)入一個(gè)文本文件中。FileReader fin = new FileReader(“文件文件1”);BufferedReader bin = new BufferedReader(fin);/創(chuàng)建創(chuàng)建“文件文件1”的輸出

43、流對(duì)象的輸出流對(duì)象aline = bin.readLine();/讀取一行字符串,輸入流結(jié)束時(shí)返回讀取一行字符串,輸入流結(jié)束時(shí)返回nullbin.close();fin.close();9.4 9.4 文件操作文件操作9.4.1 文件操作類(lèi)文件操作類(lèi)9.4.2 文件過(guò)濾器接口文件過(guò)濾器接口9.4.3 文件對(duì)話框組件文件對(duì)話框組件9.4.4 隨機(jī)存取文件類(lèi)隨機(jī)存取文件類(lèi)文件操作文件操作文件操作類(lèi)文件操作類(lèi)nFile文件類(lèi):記載文件屬性信息,是對(duì)文件進(jìn)行操作文件類(lèi):記載文件屬性信息,是對(duì)文件進(jìn)行操作的手段。的手段。n文件文件順序順序存?。翰捎昧鞯姆绞?,不同類(lèi)型文件需要使存取:采用流的方式,不同類(lèi)型

44、文件需要使用不同的流類(lèi)。用不同的流類(lèi)。n文件文件隨機(jī)隨機(jī)存取:采用存?。翰捎肦andomAccessFile隨機(jī)存取文隨機(jī)存取文件類(lèi)。件類(lèi)。文件操作類(lèi)文件操作類(lèi) File類(lèi)的對(duì)象,表示了類(lèi)的對(duì)象,表示了磁盤(pán)上的磁盤(pán)上的文件文件或或目錄目錄,保保存它們的各種存它們的各種屬性屬性并提供各種并提供各種操作操作方法方法,如文件名、,如文件名、長(zhǎng)度、最后修改時(shí)間、是否只讀等;獲得當(dāng)前文件路長(zhǎng)度、最后修改時(shí)間、是否只讀等;獲得當(dāng)前文件路徑名、判斷文件是否存在、創(chuàng)建文件、刪除文件等。徑名、判斷文件是否存在、創(chuàng)建文件、刪除文件等。File類(lèi)聲明如下:類(lèi)聲明如下: public class File exten

45、ds Object implement Serializable, Comparable文件操作類(lèi)文件操作類(lèi)構(gòu)造方法構(gòu)造方法nPublic File(String pathname)nPublic File(File path , String name)nPublic File(String path , String name)例如:例如:文件的建立文件的建立File f1=new File(“myfile.txt”);File f1=new File(“myfile.txt”);File f2=new File f2=new File(“mydir”,“myfile.txt”);File

46、(“mydir”,“myfile.txt”);File myDir=new File(“etc”);File myDir=new File(“etc”);File f3=new File(myDir,“myfile.txt”);File f3=new File(myDir,“myfile.txt”);例如:例如:目錄文件的建立目錄文件的建立 File myDir=new File(“myjava”); File myDir=new File(“myjava”);File dir=new File(“.”,“”);File dir=new File(“.”,“”);/dir/dir文件對(duì)象,表示

47、當(dāng)前目錄。文件對(duì)象,表示當(dāng)前目錄。File dir=new File(“./File dir=new File(“./”,“”);,“”);/dir/dir文件對(duì)象,表示當(dāng)前目錄上一級(jí)目錄文件對(duì)象,表示當(dāng)前目錄上一級(jí)目錄File myDir=new File(“File myDir=new File(“”,“”);,“”);/dir/dir文件對(duì)象,表示所在盤(pán)符根目錄文件對(duì)象,表示所在盤(pán)符根目錄文件操作類(lèi)文件操作類(lèi) 實(shí)例化一個(gè)實(shí)例化一個(gè)FileFile類(lèi)對(duì)象,類(lèi)對(duì)象,并不是真的生成并不是真的生成一個(gè)文件或目錄,而只是生成一個(gè)文件或目錄,而只是生成一個(gè)對(duì)文件和目錄進(jìn)行一個(gè)對(duì)文件和目錄進(jìn)行描述的對(duì)

48、象描述的對(duì)象。 例如,例如,new File(“myfile.txt”);new File(“myfile.txt”);并不會(huì)生成一個(gè)文件,而是描述有并不會(huì)生成一個(gè)文件,而是描述有這樣一個(gè)文件;這樣一個(gè)文件;new File(“etc”)new File(“etc”)也不是生成一個(gè)目錄,而是對(duì)這也不是生成一個(gè)目錄,而是對(duì)這個(gè)目錄進(jìn)行描述的對(duì)象,例如生成當(dāng)前目錄對(duì)象個(gè)目錄進(jìn)行描述的對(duì)象,例如生成當(dāng)前目錄對(duì)象new File(“.”,“”)new File(“.”,“”)當(dāng)前目錄已經(jīng)是存在的所以只是生成一個(gè)對(duì)當(dāng)前目錄進(jìn)行描述表示的對(duì)當(dāng)前目錄已經(jīng)是存在的所以只是生成一個(gè)對(duì)當(dāng)前目錄進(jìn)行描述表示的對(duì)象。

49、象。創(chuàng)建的方法:創(chuàng)建的方法:u public boolean createNewFile() throws public boolean createNewFile() throws IOExceptionIOException 當(dāng)且僅當(dāng)不存在具有此抽象路徑名指定的名稱(chēng)的文件時(shí),創(chuàng)建由此當(dāng)且僅當(dāng)不存在具有此抽象路徑名指定的名稱(chēng)的文件時(shí),創(chuàng)建由此抽象路徑名指定的一個(gè)新的空文件。抽象路徑名指定的一個(gè)新的空文件。u public boolean mkdir() public boolean mkdir() 創(chuàng)建此抽象路徑名指定的目錄。創(chuàng)建此抽象路徑名指定的目錄。例如:例如: 建立文件夾:建立文件夾:

50、child = new File(“myjava”);child = new File(“myjava”); child.mkdir(); child.mkdir();文件操作類(lèi)文件操作類(lèi)File類(lèi)提供的方法類(lèi)提供的方法(1)訪問(wèn)文件對(duì)象訪問(wèn)文件對(duì)象nPublic String getName()/返回文件名,不包含路徑返回文件名,不包含路徑nPublic String getPath ()/返回相對(duì)路徑返回相對(duì)路徑nPublic String getAbsolutePath ()/返回絕對(duì)路徑返回絕對(duì)路徑nPublic String getParent ()/返回父文件對(duì)象的路徑名返回父文件

51、對(duì)象的路徑名nPublic File getParentFile ()/返回父文件對(duì)象返回父文件對(duì)象(2)獲得文件屬性獲得文件屬性nPublic long length()nPublic boolean exists()nPublic long lastModified()npublic boolean isDirectory() npublic boolean isFile() 文件操作類(lèi)文件操作類(lèi)npublic boolean canRead()npublic boolean canWrite()npublic boolean isHidden()npublic boolean setRe

52、adOnly()npublic boolean setLastModified(long time)(3)文件操作文件操作npublic boolean createNewFile() throws IOException npublic boolean renameTo(File dest)npublic boolean delete()(4)目錄操作目錄操作npublic boolean mkdir()npublic String list()npublic File listFiles()【例例9.6】 當(dāng)前目錄文件列表。當(dāng)前目錄文件列表。文件過(guò)濾器接口文件過(guò)濾器接口FileFilter

53、和和FilenameFilter接口接口public interface FileFilter public boolean accept(File pathname)public interface FilenameFilter public boolean accept(File dir, String name)文件過(guò)濾器接口文件過(guò)濾器接口FileFilter和和FilenameFilter接口接口 accept() /文件過(guò)濾代碼實(shí)現(xiàn)文件過(guò)濾代碼實(shí)現(xiàn)獲得文件列表時(shí)使用過(guò)濾器獲得文件列表時(shí)使用過(guò)濾器nPublic String list(FilenameFilter filter)nPu

54、blic File listFiles(FilenameFilter filter)nPublic String list(FileFilter filter)【例例9.7】 帶過(guò)濾器的文件名列表帶過(guò)濾器的文件名列表FileDialog在在java.awt包中,是對(duì)話框的子類(lèi),分為兩種。包中,是對(duì)話框的子類(lèi),分為兩種。u打開(kāi)(打開(kāi)(open)文件對(duì)話框)文件對(duì)話框u保存(保存(save)文件對(duì)話框)文件對(duì)話框文件對(duì)話框的構(gòu)造方法文件對(duì)話框的構(gòu)造方法nPublic FileDialog(Frame parent)nPublic FileDialog(Frame parent, String title)nPublic FileDialog(Frame parent,

溫馨提示

  • 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)論