第09章輸入輸出流和文件操作(修改2縮減)_第1頁
第09章輸入輸出流和文件操作(修改2縮減)_第2頁
第09章輸入輸出流和文件操作(修改2縮減)_第3頁
第09章輸入輸出流和文件操作(修改2縮減)_第4頁
第09章輸入輸出流和文件操作(修改2縮減)_第5頁
已閱讀5頁,還剩46頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、第第9 9章章 輸入輸出流和文件操作輸入輸出流和文件操作流的基本概念流的基本概念流類流類nInputStream抽象字節(jié)輸入流類抽象字節(jié)輸入流類nOuputStream 抽象字節(jié)輸出流類抽象字節(jié)輸出流類nReader抽象字符輸入流類抽象字符輸入流類nWriter抽象字符輸出流類抽象字符輸出流類文件操作類文件操作類nFile文件類文件類nRandomAccessFile 隨機(jī)存取文件類隨機(jī)存取文件類第第9 9章章 本章主要內(nèi)容本章主要內(nèi)容流的基本概念流的基本概念n流(流(stream)是指一組有順序、有起點(diǎn)和終點(diǎn)的字節(jié)集合,是指一組有順序、有起點(diǎn)和終點(diǎn)的字節(jié)集合,是對是對數(shù)據(jù)傳輸數(shù)據(jù)傳輸?shù)目偡Q或

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

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

4、一個(gè)字節(jié),數(shù)據(jù)傳輸效率低。為提高效率,將一塊內(nèi)存空間設(shè)個(gè)字節(jié),數(shù)據(jù)傳輸效率低。為提高效率,將一塊內(nèi)存空間設(shè)計(jì)成緩沖區(qū)。配備緩沖區(qū)的流稱為計(jì)成緩沖區(qū)。配備緩沖區(qū)的流稱為緩沖流緩沖流。n當(dāng)當(dāng)向流寫入數(shù)據(jù)向流寫入數(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è)備自動讀取數(shù)據(jù)充滿緩沖區(qū)。系統(tǒng)就從相關(guān)設(shè)

5、備自動讀取數(shù)據(jù)充滿緩沖區(qū)。流的基本概念流的基本概念 java.io包中的數(shù)據(jù)流包中的數(shù)據(jù)流n字節(jié)流:以字節(jié)流:以字節(jié)字節(jié)作為流中元素的基本類型。作為流中元素的基本類型。n字符流:以字符流:以字符字符作為流中元素的基本類型。作為流中元素的基本類型。nInputStream抽象的抽象的字節(jié)字節(jié)輸入輸入流根類流根類nOuputStream抽象的抽象的字節(jié)字節(jié)輸出輸出流根類流根類nReader抽象的抽象的字符字符輸入輸入流根類流根類Writer抽象的抽象的字符字符輸出輸出流根類流根類9.2 9.2 字節(jié)輸入字節(jié)輸入/ /輸出流類輸出流類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 對象字節(jié)流對象字節(jié)流字節(jié)流字節(jié)流n字節(jié)輸入流類字節(jié)輸入流類InputStream :所有面向字節(jié)的輸入流超類。:所有面向字節(jié)的輸入流超類。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類的子類字節(jié)流字節(jié)流n字節(jié)輸出流類字節(jié)輸出流類OutputStream:所有面向字節(jié)的輸出流超類。:所有面向字節(jié)的輸出流超類。public abstract class OutputStream extends Object implements Closeable, Flushable public abstract void write(int b) throws

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

9、節(jié)輸出流OutputStream類:所有面向字節(jié)的類:所有面向字節(jié)的輸出流的超類。輸出流的超類。 字節(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é)流對象字節(jié)流對象字節(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類的常量對象,調(diào)用類的常量對象,調(diào)用read()方法可方法可以從鍵盤接收數(shù)據(jù);以從鍵盤接收數(shù)據(jù);System.out是是PrintStream類的常量對象,調(diào)用類的常量對象,調(diào)用print()和和println()方法可以向顯示器輸出數(shù)據(jù)。方法可以向顯示器輸出數(shù)據(jù)。 nPrintStream類類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)輸入過程標(biāo)準(zhǔn)輸入過程 輸入”abc123”鍵盤

12、標(biāo)準(zhǔn)輸入流程序讀取標(biāo)準(zhǔn)輸入流System.in.read()對字節(jié)數(shù)組進(jìn)行操作01234567851197 98 99 49 50 51 13 10字節(jié)數(shù)組buffer實(shí)際讀入8 個(gè)字節(jié)System.in.read()會拋出異常abc123對應(yīng)字符顯示器程序System.out.println(count=+count);99111 117 110 11661561310不會拋出異常寫入coun標(biāo)準(zhǔn)輸出流對應(yīng)字符緩沖區(qū)t=8圖圖9.6 標(biāo)準(zhǔn)輸出過程標(biāo)準(zhǔn)輸出過程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”的輸入流對象的輸入流對象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)用于用于向文件寫數(shù)據(jù)向文件寫數(shù)據(jù)。構(gòu)造方法構(gòu)造方法npublic FileOutputStream (String name) throws FileNotFoundExceptionnpublic FileOutputStream (File file) throws FileNotFoundExceptionnpublic FileOutputStream (String name, Boolean append) throws FileNotFoundException寫入字節(jié)的方法寫入字節(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”的輸出流對象的輸出流對象 fout.write(buffer); /將將buffer數(shù)組中

17、的數(shù)據(jù)寫入輸出流,即寫入到文件中。數(shù)組中的數(shù)據(jù)寫入輸出流,即寫入到文件中。 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為重寫方式,數(shù)據(jù)從原文件開始處寫入,為重寫方式,數(shù)據(jù)從原文件開始處寫入,覆蓋文件中原有的數(shù)據(jù)。覆蓋文件中原有的數(shù)據(jù)。讀文件時(shí)讀文件時(shí)指定文件不存在,拋出異常;指定文件不存在,拋出異常;寫文件時(shí)寫文件時(shí)指定文件不存在,則創(chuàng)建一個(gè)新文件寫指定文件不存在,則創(chuàng)建一個(gè)新文件寫入數(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ī)器無關(guān)的風(fēng)格讀取或?qū)憯?shù)據(jù)流允許程序按與機(jī)器無關(guān)的風(fēng)格讀取或?qū)懭霐?shù)據(jù)。可以讀取或?qū)懭肴魏稳霐?shù)據(jù)??梢宰x取或?qū)懭肴魏蜫ava類型數(shù)據(jù)。類型數(shù)據(jù)。數(shù)據(jù)輸入流數(shù)據(jù)輸入流DataInputStream數(shù)據(jù)輸出流數(shù)據(jù)輸出流DataOutputStream以前只能寫字節(jié)數(shù)據(jù)以前只能寫字節(jié)數(shù)據(jù)現(xiàn)在任何現(xiàn)在任何JAVAJAVA數(shù)據(jù)數(shù)據(jù)

19、類型的數(shù)據(jù)都能寫類型的數(shù)據(jù)都能寫了!了!數(shù)據(jù)字節(jié)流是在字節(jié)流的基礎(chǔ)上對數(shù)據(jù)進(jìn)行加工!數(shù)據(jù)字節(jié)流是在字節(jié)流的基礎(chǔ)上對數(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類類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”的輸入流對象的輸入流對象DataInputStream din = new DataInputStream(fin);int arrInt = din.readInt

22、();/從從“文件文件1”中讀取一個(gè)中讀取一個(gè)int類型數(shù)據(jù)放入類型數(shù)據(jù)放入arrInt變量中。變量中。din.close();fin.close(); /關(guān)閉輸入流關(guān)閉輸入流9.2.4 9.2.4 數(shù)據(jù)字節(jié)流數(shù)據(jù)字節(jié)流nDataOutputStream類類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 /寫入一個(gè)整型寫入一個(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 /寫入一個(gè)字符寫入一個(gè)字符 public final void writeBoolean(boolean v) throws IOException public final void writeChars(String s) throws IOException public final int size() /返回實(shí)際寫入的字節(jié)數(shù)返回實(shí)際寫入的字節(jié)數(shù) FileOutputStream fout = new FileOutputStream(“文件文件1”); /創(chuàng)建創(chuàng)建

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

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

27、恢復(fù)那些序列化的對象。的對象。構(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)換為期望的類型。讀取時(shí),需要將其強(qiáng)制轉(zhuǎn)換為期望的類型。 FileInputStream fin = new FileInputStream (

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

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

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

32、出一個(gè)NotSerializableException?!纠?.49.4】 使用對象流將若干學(xué)生對象寫入以對象為基本類型的記錄式文件中使用對象流將若干學(xué)生對象寫入以對象為基本類型的記錄式文件中圖圖9.7 9.7 各種輸入各種輸入/ /輸出流及其讀輸出流及其讀/ /寫方法寫方法 字節(jié)數(shù)組buffer基本數(shù)據(jù)類型變量i鍵盤文件輸入流顯示器文件對象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 字符輸入字符輸入/ /輸出流類輸出流類9.3.1 抽象字符流抽象字符流9.3.2 文件字符流文件字符流9.3.3 緩沖字符流緩沖字符流9.3.1 9.3.1 抽象字符流抽象字符流1.字符輸入流字符輸入流Reader 為所有面向字符的輸入流的超類。聲明為為所有面向字符的輸入流的超類。

34、聲明為java.io中中的抽象類。的抽象類。 public abstract class Reader extend Object2.字符輸出類字符輸出類Writer 為所有面向字符的輸出流的超類。聲明為為所有面向字符的輸出流的超類。聲明為java.io中中的抽象類。的抽象類。 public abstract class Writer extend Object 文件字符流文件字符流字符緩沖流字符緩沖流9.3.1 9.3.1 抽象字符流抽象字符流nReader類類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類類public abstract class Writer implements Appendable, Clo

36、seable, Flushable public void write(int c) throws IOException/c的低的低16位寫入位寫入 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類:類: 用于用于文件字符的輸入輸出文件字符的輸入輸出處理,與文件字節(jié)流類處理,與文件字節(jié)流類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”的輸入流對象的輸入流對象fin.read(cbuf) ; /從文件字符輸入流中讀取到一個(gè)字符數(shù)組從文件字符輸入流中讀取到一個(gè)字符數(shù)組f

39、in.close();/關(guān)閉輸出流關(guān)閉輸出流9.3.2 9.3.2 文件字符流文件字符流n文件字符流文件字符流FileReader和和FileWriter類:類: 用于用于文件字符的輸入輸出文件字符的輸入輸出處理,與文件字節(jié)流類處理,與文件字節(jié)流類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 /將字符串寫入輸出流將字符串寫入輸出流FileWriter fout = new FileWriter(“文件文件1”);/創(chuàng)建創(chuàng)建“文件文件1”的輸出流對象的輸出流對象fout.write(“abc); /向文件字符輸出流寫入一個(gè)字符串向文件字符輸出流寫入一個(gè)字符串fout.close()

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

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

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

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

45、ds Object implement Serializable, Comparable文件操作類文件操作類構(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文件對象,表示

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

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

49、象。創(chuàng)建的方法:創(chuàng)建的方法:u public boolean createNewFile() throws public boolean createNewFile() throws IOExceptionIOException 當(dāng)且僅當(dāng)不存在具有此抽象路徑名指定的名稱的文件時(shí),創(chuàng)建由此當(dāng)且僅當(dā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();文件操作類文件操作類File類提供的方法類提供的方法(1)訪問文件對象訪問文件對象nPublic String getName()/返回文件名,不包含路徑返回文件名,不包含路徑nPublic String getPath ()/返回相對路徑返回相對路徑nPublic String getAbsolutePath ()/返回絕對路徑返回絕對路徑nPublic String getParent ()/返回父文件對象的路徑名返回父文件

51、對象的路徑名nPublic File getParentFile ()/返回父文件對象返回父文件對象(2)獲得文件屬性獲得文件屬性nPublic long length()nPublic boolean exists()nPublic long lastModified()npublic boolean isDirectory() npublic boolean isFile() 文件操作類文件操作類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)前目錄文件列表。文件過濾器接口文件過濾器接口FileFilter

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

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

溫馨提示

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

評論

0/150

提交評論