![第09章輸入輸出流和文件操作(修改2縮減)_第1頁](http://file2.renrendoc.com/fileroot_temp3/2021-10/28/59decb57-d820-4baf-ae1f-063f74e7c086/59decb57-d820-4baf-ae1f-063f74e7c0861.gif)
![第09章輸入輸出流和文件操作(修改2縮減)_第2頁](http://file2.renrendoc.com/fileroot_temp3/2021-10/28/59decb57-d820-4baf-ae1f-063f74e7c086/59decb57-d820-4baf-ae1f-063f74e7c0862.gif)
![第09章輸入輸出流和文件操作(修改2縮減)_第3頁](http://file2.renrendoc.com/fileroot_temp3/2021-10/28/59decb57-d820-4baf-ae1f-063f74e7c086/59decb57-d820-4baf-ae1f-063f74e7c0863.gif)
![第09章輸入輸出流和文件操作(修改2縮減)_第4頁](http://file2.renrendoc.com/fileroot_temp3/2021-10/28/59decb57-d820-4baf-ae1f-063f74e7c086/59decb57-d820-4baf-ae1f-063f74e7c0864.gif)
![第09章輸入輸出流和文件操作(修改2縮減)_第5頁](http://file2.renrendoc.com/fileroot_temp3/2021-10/28/59decb57-d820-4baf-ae1f-063f74e7c086/59decb57-d820-4baf-ae1f-063f74e7c0865.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、第第9 9章章 輸入輸出流和文件操作輸入輸出流和文件操作流的基本概念流的基本概念流類流類nInputStream抽象字節(jié)輸入流類抽象字節(jié)輸入流類nOuputStream 抽象字節(jié)輸出流類抽象字節(jié)輸出流類nReader抽象字符輸入流類抽象字符輸入流類nWriter抽象字符輸出流類抽象字符輸出流類文件操作類文件操作類nFile文件類文件類nRandomAccessFile 隨機存取文件類隨機存取文件類第第9 9章章 本章主要內(nèi)容本章主要內(nèi)容流的基本概念流的基本概念n流(流(stream)是指一組有順序、有起點和終點的字節(jié)集合,是指一組有順序、有起點和終點的字節(jié)集合,是對是對數(shù)據(jù)傳輸數(shù)據(jù)傳輸?shù)目偡Q或
2、抽象。數(shù)據(jù)在兩個對象之間的傳輸稱的總稱或抽象。數(shù)據(jù)在兩個對象之間的傳輸稱為為流流。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ù)的操作稱為寫。輸入流只能進行讀;輸出流只輸
3、入流只能進行讀;輸出流只能進行寫。能進行寫。流的基本概念流的基本概念在程序代碼中,用輸入流從外部設(shè)備中讀取數(shù)據(jù)到內(nèi)存;用輸在程序代碼中,用輸入流從外部設(shè)備中讀取數(shù)據(jù)到內(nèi)存;用輸出流將內(nèi)存數(shù)據(jù)寫到外部設(shè)備中。出流將內(nèi)存數(shù)據(jù)寫到外部設(shè)備中。 不同的外部設(shè)備對應不同不同的外部設(shè)備對應不同的流類。的流類。 程序代碼(內(nèi)存中)程序代碼(內(nèi)存中)輸入流輸入流輸出流輸出流鍵盤顯示器打印機文件文件讀取寫入標準輸入流標準輸入流標準輸出流標準輸出流文件輸入流文件輸入流文件輸出流文件輸出流流的基本概念流的基本概念 流采用緩沖區(qū)技術(shù):對流進行讀流采用緩沖區(qū)技術(shù):對流進行讀/寫操作,一次只能讀寫操作,一次只能讀/寫一寫
4、一個字節(jié),數(shù)據(jù)傳輸效率低。為提高效率,將一塊內(nèi)存空間設(shè)個字節(jié),數(shù)據(jù)傳輸效率低。為提高效率,將一塊內(nèi)存空間設(shè)計成緩沖區(qū)。配備緩沖區(qū)的流稱為計成緩沖區(qū)。配備緩沖區(qū)的流稱為緩沖流緩沖流。n當當向流寫入數(shù)據(jù)向流寫入數(shù)據(jù)時,數(shù)據(jù)被發(fā)送到緩沖區(qū),當緩沖區(qū)滿時,時,數(shù)據(jù)被發(fā)送到緩沖區(qū),當緩沖區(qū)滿時,系統(tǒng)將數(shù)據(jù)全部發(fā)送到相應的設(shè)備。如果在此之前要傳輸系統(tǒng)將數(shù)據(jù)全部發(fā)送到相應的設(shè)備。如果在此之前要傳輸數(shù)據(jù),可以使用數(shù)據(jù),可以使用flush()操作;操作;n當當從流讀取數(shù)據(jù)從流讀取數(shù)據(jù)時,系統(tǒng)實際從緩沖區(qū)讀。當緩沖區(qū)空時,時,系統(tǒng)實際從緩沖區(qū)讀。當緩沖區(qū)空時,系統(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標準輸入標準輸
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; /返回讀取的一個字節(jié),抽象方法返回讀取的一個字節(jié),抽象方法 public int read(byte b) throws IOExcepti
7、on /讀取若干字節(jié)到指定緩沖區(qū)讀取若干字節(jié)到指定緩沖區(qū)b,返回實際讀取的字節(jié)數(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; /寫入一個字節(jié),抽象方法寫入一個字節(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)容:標準輸入標準輸入/ /輸出流輸出流文件字節(jié)流文件字節(jié)流數(shù)據(jù)字節(jié)流數(shù)據(jù)字節(jié)流對象字節(jié)流對象字節(jié)流9.2.2 Java9.2.2 Java標準輸入標準輸入/ /輸出輸出n標準輸入標準輸入/輸出常量輸出常量public final class System extends Object public final static InputStream in /標準輸入常量標準輸入常量 public final static PrintStream out /標準輸出常量標準
10、輸出常量 public final static PrintStream err/標準錯誤輸出常量標準錯誤輸出常量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標準輸入標準輸入/ /輸出輸出 【例9.1】 標準輸入/輸出圖圖9.5 標準輸入過程標準輸入過程 輸入”abc123”鍵盤
12、標準輸入流程序讀取標準輸入流System.in.read()對字節(jié)數(shù)組進行操作01234567851197 98 99 49 50 51 13 10字節(jié)數(shù)組buffer實際讀入8 個字節(jié)System.in.read()會拋出異常abc123對應字符顯示器程序System.out.println(count=+count);99111 117 110 11661561310不會拋出異常寫入coun標準輸出流對應字符緩沖區(qū)t=8圖圖9.6 標準輸出過程標準輸出過程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ù),當返回的字節(jié)數(shù),當返回-1時文件讀完。時文件讀完。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:默認:默認falsentrue為添加方式,數(shù)據(jù)添加在原文件的末尾為添加方式,數(shù)據(jù)添加在原文件的末尾nfalse為重寫方式,數(shù)據(jù)從原文件開始處寫入,為重寫方式,數(shù)據(jù)從原文件開始處寫入,覆蓋文件中原有的數(shù)據(jù)。覆蓋文件中原有的數(shù)據(jù)。讀文件時讀文件時指定文件不存在,拋出異常;指定文件不存在,拋出異常;寫文件時寫文件時指定文件不存在,則創(chuàng)建一個新文件寫指定文件不存在,則創(chuàng)建一個新文件寫入數(shù)據(jù)。入數(shù)據(jù)。9.2.3 9.2.3
18、 文件字節(jié)流文件字節(jié)流 【例例9.2】 使用文件字節(jié)輸入使用文件字節(jié)輸入/輸出流輸出流實現(xiàn)文件的輸入實現(xiàn)文件的輸入/輸出操作。輸出操作。n文件輸入操作文件輸入操作n文件輸出操作文件輸出操作n文件復制操作文件復制操作 9.2.4 9.2.4 數(shù)據(jù)字節(jié)流數(shù)據(jù)字節(jié)流 數(shù)據(jù)流允許程序按與機器無關(guān)的風格讀取或?qū)憯?shù)據(jù)流允許程序按與機器無關(guān)的風格讀取或?qū)懭霐?shù)據(jù)??梢宰x取或?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ù)進行加工!數(shù)據(jù)字節(jié)流是在字節(jié)流的基礎(chǔ)上對數(shù)據(jù)進行加工!真正進行傳輸?shù)倪€是字節(jié)流!真正進行傳輸?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 /讀取一個整型讀取一個整型 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 /讀取一個字符讀取一個字符 public final boolean readBoolean() throws IOException 當輸入流結(jié)束時,拋出當輸入流結(jié)束時,拋出EOFException異常;異常;發(fā)生發(fā)生I/O錯誤時,拋出錯誤時,拋出IOEception異常。異常。FileInputStream fin = new FileInputStream (“文件文件1”); /創(chuàng)建創(chuàng)建“文件文件1”的輸入流對象的輸入流對象DataInputStream din = new DataInputStream(fin);int arrInt = din.readInt
22、();/從從“文件文件1”中讀取一個中讀取一個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 /寫入一個整型寫入一個整型 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 /寫入一個字符寫入一個字符 public final void writeBoolean(boolean v) throws IOException public final void writeChars(String s) throws IOException public final int size() /返回實際寫入的字節(jié)數(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序列值寫入一個整序列值寫入一個整數(shù)類型文件中。數(shù)類型文件中。n數(shù)據(jù)寫入文件的思路同標準輸出數(shù)據(jù)寫入文件的思路同標準輸出n捕獲異??刂戚?/p>
26、入結(jié)束捕獲異??刂戚斎虢Y(jié)束 9.2.5 9.2.5 對象字節(jié)流對象字節(jié)流 對象流可以對象流可以直接寫入或讀取一個對象直接寫入或讀取一個對象。對。對象流分為:象流分為:n對象輸入流對象輸入流ObjectInputStream;n對象輸出流對象輸出流ObjectOutputStream。 它們必須它們必須建立在其他流之上建立在其他流之上。傳輸?shù)年P(guān)鍵是把。傳輸?shù)年P(guān)鍵是把有特殊結(jié)構(gòu)的有特殊結(jié)構(gòu)的對象進行序列化對象進行序列化,然后通過其他,然后通過其他流來進行傳輸。流來進行傳輸。9.2.5 9.2.5 對象字節(jié)流對象字節(jié)流n對象輸入流對象輸入流ObjectInputStream:用于恢復那些序列化:用于
27、恢復那些序列化的對象。的對象。構(gòu)造方法:構(gòu)造方法: public ObjectInputStream(InputStream in) throws IOException,StreamCorruptedException實例方法:實例方法: Public final Object readObject() throws OptionalDataException,ClassNotFoundException,IOException 讀取時,需要將其強制轉(zhuǎn)換為期望的類型。讀取時,需要將其強制轉(zhuǎn)換為期望的類型。 FileInputStream fin = new FileInputStream (
28、“文件文件1”); /創(chuàng)建創(chuàng)建“文件文件1”的輸入流對象的輸入流對象ObjectInputStream din = new ObjectInputStream (fin);arrInt = (強制類型轉(zhuǎn)換強制類型轉(zhuǎn)換)din.readObject();/從文件從文件1中讀取一個對象數(shù)據(jù)放入對象變量中讀取一個對象數(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實例方法:實例方法: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由于一個類的對象包含多種信息,為了保證從對象流中能夠讀由于一個類的對象包含多種信息,為了保證從對象流中能夠讀取到正確的對象,要求所有寫入對象流的對象都必須是取到正確的對象,要求所有寫入對象流的對象都必須是序列化序列化的對象的對象。n一個類如果實現(xiàn)了序列化一個類如果實現(xiàn)了序列化Serializable接口,那么這個
31、類的對接口,那么這個類的對象就是象就是序列化的對象序列化的對象。nSerializable接口中沒有方法,因此實現(xiàn)該接口的類不需要實接口中沒有方法,因此實現(xiàn)該接口的類不需要實現(xiàn)額外的方法。一個序列化的子類對象也是序列化的?,F(xiàn)額外的方法。一個序列化的子類對象也是序列化的。n如果一個對象的成員變量是一個對象,那么這個對象的數(shù)據(jù)成如果一個對象的成員變量是一個對象,那么這個對象的數(shù)據(jù)成員也會被保存。員也會被保存。n如果一個可序列化的對象包含對某個不可序列化的對象的引用,如果一個可序列化的對象包含對某個不可序列化的對象的引用,那么整個序列化操作將會失敗,并且會拋出一個那么整個序列化操作將會失敗,并且會拋
32、出一個NotSerializableException?!纠?.49.4】 使用對象流將若干學生對象寫入以對象為基本類型的記錄式文件中使用對象流將若干學生對象寫入以對象為基本類型的記錄式文件中圖圖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) ; /從文件字符輸入流中讀取到一個字符數(shù)組從文件字符輸入流中讀取到一個字符數(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); /向文件字符輸出流寫入一個字符串向文件字符輸出流寫入一個字符串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é)束時返回讀取一行字符串,輸入流結(jié)束時返回null字符緩沖輸出流字符緩沖輸出流Buffered
42、Writer類類npublic BufferedWriter(Writer out)npublic BufferedWriter(Writer out, int sz) / sz緩沖區(qū)長度緩沖區(qū)長度npublic void newLine() throws IOException /寫入換行符。寫入換行符?!纠?.5】 將將Fibonacci序列值寫入一個文本文件中。序列值寫入一個文本文件中。FileReader fin = new FileReader(“文件文件1”);BufferedReader bin = new BufferedReader(fin);/創(chuàng)建創(chuàng)建“文件文件1”的輸出
43、流對象的輸出流對象aline = bin.readLine();/讀取一行字符串,輸入流結(jié)束時返回讀取一行字符串,輸入流結(jié)束時返回nullbin.close();fin.close();9.4 9.4 文件操作文件操作9.4.1 文件操作類文件操作類9.4.2 文件過濾器接口文件過濾器接口9.4.3 文件對話框組件文件對話框組件9.4.4 隨機存取文件類隨機存取文件類文件操作文件操作文件操作類文件操作類nFile文件類:記載文件屬性信息,是對文件進行操作文件類:記載文件屬性信息,是對文件進行操作的手段。的手段。n文件文件順序順序存?。翰捎昧鞯姆绞剑煌愋臀募枰勾嫒。翰捎昧鞯姆绞?,不同類型
44、文件需要使用不同的流類。用不同的流類。n文件文件隨機隨機存?。翰捎么嫒。翰捎肦andomAccessFile隨機存取文隨機存取文件類。件類。文件操作類文件操作類 File類的對象,表示了類的對象,表示了磁盤上的磁盤上的文件文件或或目錄目錄,保保存它們的各種存它們的各種屬性屬性并提供各種并提供各種操作操作方法方法,如文件名、,如文件名、長度、最后修改時間、是否只讀等;獲得當前文件路長度、最后修改時間、是否只讀等;獲得當前文件路徑名、判斷文件是否存在、創(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、當前目錄。文件對象,表示當前目錄。File dir=new File(“./File dir=new File(“./”,“”);,“”);/dir/dir文件對象,表示當前目錄上一級目錄文件對象,表示當前目錄上一級目錄File myDir=new File(“File myDir=new File(“”,“”);,“”);/dir/dir文件對象,表示所在盤符根目錄文件對象,表示所在盤符根目錄文件操作類文件操作類 實例化一個實例化一個FileFile類對象,類對象,并不是真的生成并不是真的生成一個文件或目錄,而只是生成一個文件或目錄,而只是生成一個對文件和目錄進行一個對文件和目錄進行描述的對
48、象描述的對象。 例如,例如,new File(“myfile.txt”);new File(“myfile.txt”);并不會生成一個文件,而是描述有并不會生成一個文件,而是描述有這樣一個文件;這樣一個文件;new File(“etc”)new File(“etc”)也不是生成一個目錄,而是對這也不是生成一個目錄,而是對這個目錄進行描述的對象,例如生成當前目錄對象個目錄進行描述的對象,例如生成當前目錄對象new File(“.”,“”)new File(“.”,“”)當前目錄已經(jīng)是存在的所以只是生成一個對當前目錄進行描述表示的對當前目錄已經(jīng)是存在的所以只是生成一個對當前目錄進行描述表示的對象。
49、象。創(chuàng)建的方法:創(chuàng)建的方法:u public boolean createNewFile() throws public boolean createNewFile() throws IOExceptionIOException 當且僅當不存在具有此抽象路徑名指定的名稱的文件時,創(chuàng)建由此當且僅當不存在具有此抽象路徑名指定的名稱的文件時,創(chuàng)建由此抽象路徑名指定的一個新的空文件。抽象路徑名指定的一個新的空文件。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】 當前目錄文件列表。當前目錄文件列表。文件過濾器接口文件過濾器接口FileFilter
53、和和FilenameFilter接口接口public interface FileFilter public boolean accept(File pathname)public interface FilenameFilter public boolean accept(File dir, String name)文件過濾器接口文件過濾器接口FileFilter和和FilenameFilter接口接口 accept() /文件過濾代碼實現(xiàn)文件過濾代碼實現(xiàn)獲得文件列表時使用過濾器獲得文件列表時使用過濾器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)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年中國通信業(yè)務行業(yè)市場發(fā)展現(xiàn)狀及投資方向研究報告
- 2025年核桃新品種推廣與應用技術(shù)合同
- 2025年度醫(yī)療設(shè)備采購合同變更協(xié)議
- 2025年中國重型柴油車行業(yè)市場運行態(tài)勢與投資戰(zhàn)略咨詢報告
- 加工產(chǎn)品訂單合同范例
- 個人借款收條合同范例
- 刷單合同范例
- 倉庫及辦公室裝修合同范例
- 培養(yǎng)專家型校長的創(chuàng)新思路
- 公司送車合同范例
- 緒論中國文化概論張岱年
- 發(fā)生輸液反應時的應急預案及處理方法課件
- 中國旅游地理(高職)全套教學課件
- 數(shù)字貨幣的匿名性與反洗錢
- 門脈高壓性消化道出血的介入治療課件
- 民航保密培訓課件
- 血庫輸血培訓課件
- 詩詞寫作入門
- 學校教育中的STEM教育模式培訓課件
- 電器整機新產(chǎn)品設(shè)計DFM檢查表范例
- 樁基礎(chǔ)工程文件歸檔內(nèi)容及順序表
評論
0/150
提交評論