Java教材課件13輸入輸出流編程_第1頁
Java教材課件13輸入輸出流編程_第2頁
Java教材課件13輸入輸出流編程_第3頁
Java教材課件13輸入輸出流編程_第4頁
Java教材課件13輸入輸出流編程_第5頁
已閱讀5頁,還剩43頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、第13章 輸入輸出流編程教學目的要求1.理解 java 語言中輸入/輸出流的處理方法;2.掌握文件、字節(jié)流和字符流的處理方法,正確使用對象串行化的方法。 113.1 File類應用舉例 文件操作是程序設計必不可少的部分。計算機把需要長期保存的數(shù)據(jù)以文件的形式存放在各種外部存儲設備上。在需要輸入數(shù)據(jù)時,從文件讀出數(shù)據(jù);而需要輸出數(shù)據(jù)時,把數(shù)據(jù)寫入文件。213.1.1 File類用來獲取文件或目錄的信息 Java把目錄看成特殊的文件,作為文件名的列表處理,F(xiàn)ile類提供方法用以訪問諸如路徑、名稱、大小、日期、讀寫屬性等文件或目錄的信息。也可以創(chuàng)建、刪除文件、改變文件名、創(chuàng)建目錄等。File類的直接

2、父類是Object。31. File類的構造方法File類中常用的構造方法如下: public File(String pathname) 其中的pathname是路徑名字符串。該構造方法通過將給定路徑名字符串轉換成抽象路徑名來創(chuàng)建一個新File實例。若給定字符串pathname是空字符串,則結果是空的抽象路徑名。 public File(File parent,String child) 其中的parent是父抽象路徑名、child是子路徑名字符串。該構造方法根據(jù)parent抽象路徑名和child路徑名字符串創(chuàng)建一個新File實例。4 public File(String parent,St

3、ring child) 其中參數(shù)parent是父路徑名字符串、child是子路徑名字符串。該構造方法根據(jù)parent路徑名字符串和child路徑名字符串創(chuàng)建一個新File實例。如果parent為null,則創(chuàng)建一個新的File實例,這與調用單參數(shù)File方法,以給定child路徑名字符串作為參數(shù)的效果一樣。否則,parent路徑名字符串用于表示目錄,而child路徑名字符串用于表示目錄或文件。如果 child路徑名字符串是絕對路徑名,則用與系統(tǒng)有關的方式將它轉換成一個相對路徑名。如果parent是空字符串,則新的File實例是通過將child轉換成抽象路徑名并根據(jù)與系統(tǒng)有關的默認目錄來分析結果

4、而創(chuàng)建的。否則,將每個路徑名字符串轉換成一個抽象路徑名,并根據(jù)父抽象路徑名分析子抽象路徑名。52.File類中的常用成員方法 File類中有許多成員方法,常用的成員方法及其功能概要描述見表13-1。限于篇幅的原因,讀者在使用時可以參考Java API中對這些成員方法用法詳細的說明。6public boolean canRead()測試應用程序能否讀此對象指定的文件public boolean canWrite()測試應用程序能否寫此對象指定的文件public boolean exists()測試此抽象路徑名表示的文件或目錄是否存public boolean isFile()測試此抽象路徑名表示

5、的文件是否是一個標準文件public String getAbsolutePath()返回抽象路徑名的絕對路徑名字符串public String getPath()將此抽象路徑名轉換為一個路徑名字符串public String getParent()獲取此對象指定的文件的父目錄public boolean mkdir()根據(jù)當前對象生成一個由該對象指定的路徑public String list()列出當前目錄下的文件public long length()返回由此抽象路徑名表示的文件的長度public String getName()獲取此對象指定的文件的文件名public boolean d

6、elete()刪除此抽象路徑名表示的文件或目錄public long lastModified()獲取此對象指定文件的最后修改時間(以長整型值表示) 表13-1 File類中的常用成員方法方法和描述73.類變量(靜態(tài)數(shù)據(jù)成員) File類中的靜態(tài)數(shù)據(jù)成員及其概要描述見表13-2。 表13-2 File類中的靜態(tài)數(shù)據(jù)成員成員 描述 public static String pathSeparator 與系統(tǒng)有關的路徑分隔符字符 public static char pathSeparatorChar與系統(tǒng)有關的默認路徑分隔符字符 public static String separator與系統(tǒng)

7、有關的默認名稱分隔符 public static char separatorChar與系統(tǒng)有關的默認名稱分隔符8/測試給定平臺上的文件系統(tǒng)的文件的路徑分隔字符等import java.io.*;class Li13_01public static void main(String args)System.out.println();System.out.println();System.out.println();System.out.println(nn); 例13.1測試靜態(tài)數(shù)據(jù)成員屬性。9/用File類的構造方法構造文件對象并測試該類的成員方法import java.io.*;publ

8、ic class Li13_02 public static void main(String args) File(d:jdk15 ); System.out.println(可讀?+(); System.out.println(可寫?+(); System.out.println(文件存在?+(); System.out.println(是文件?+(); System.out.println(是目錄?+(); System.out.println(文件長度=+(); System.out.println(文件最后修改日期:+(); System.out.println(文件名:+(); S

9、ystem.out.println(文件存放路徑:+(); System.out.println(文件存放路徑的父目錄:+(); 例13.2構造File對象、測試文件的屬性等有關信息應用舉例。10 注意,本例程序在運行前,讀者應確保d:jdk15文件夾中有,當然,文件夾的名字也可由讀者命名,但是,要注意同時更改程序中的相應文件夾名稱。 例13.3構造一個目錄File對象,如果該指定的目錄不存則創(chuàng)建該目錄,同時統(tǒng)計并顯示該目錄下文件和子目錄的個數(shù)以及該目錄下文件的總長度。11import java.io.*;public class Li13_03 public static void main

10、(String args) throws Exception File(d:/jdk15006/lib); if(!() (); System.out.println(); System.out.println(); /變量tsize記錄文件的總長度,變量fc,dc分別記錄給定目錄下的文件數(shù)和子目錄數(shù) int tsize=0,fc=0,dc=0; =new File(d:/jdk15006).listFiles(); for(int i=0;i) if(filesi.isFile() fc+; else dc+; tsize+=filesi.length(); System.out.print

11、ln(文件數(shù):+fc+t目錄數(shù):+dc+t文件總長度:+tsize); 1213.1.2 文件的處理 文件輸入/輸出流類和提供了對文件順序讀/寫的方法。文件輸入流類用于讀取文件中的字節(jié)數(shù)據(jù),其直接父類為InputStream;文件輸出流類用于向文件寫入的字節(jié)數(shù)據(jù),其直接父類為OutputStream。131.類的構造方法public (String name) 其中的name可以包含路徑名和文件名,該構造方法通過打開一個到實際文件的連接來創(chuàng)建一個,該文件通過文件系統(tǒng)中的路徑名name指定。public () 其中的類的對象,該構造方法通過打開一個到實際文件的連接來創(chuàng)建一個,該文件通過文件系統(tǒng)中

12、的 File對象file指定。public ( fd) 該構造方法通過使用文件描述符fdObj創(chuàng)建一個,該文件描述符表示到文件系統(tǒng)中某個實際文件的現(xiàn)有連接。142.類的構造方法public (String name) 該構造方法使用指定的字符串name創(chuàng)建一個向具有指定名稱的文件中寫入數(shù)據(jù)的輸出文件流。public () 該構造方法使用指定的文件file創(chuàng)建一個向指定File對象表示的文件中寫入數(shù)據(jù)的文件輸出流。public (File append) 創(chuàng)建一個向指定File對象表示的文件中寫入數(shù)據(jù)的文件輸出流。如果第二個參數(shù)為 true,則將字節(jié)寫入文件末尾處,而不是寫入文件開始處。153.

13、類的成員方法 類中的成員方法被調用時會產(chǎn)生IOException異常,常用成員方法見表13-3中的描述。表13-3 類中的常用成員方法方法 描述 public int read()從輸入流中讀取一個數(shù)據(jù)字節(jié)public int read(byteb)從輸入流中讀取的字節(jié)數(shù)據(jù)存放在字節(jié)數(shù)組b中public int read(byte b,int off,int len)從輸入流中讀取的len個字節(jié)數(shù)據(jù)存放在字節(jié)數(shù)組b中,offset開始存放 public long skip(long n)從輸入流中跳過n個字節(jié)public void close()關閉輸入流164.類的成員方法 類中的成員方法被

14、調用時會產(chǎn)生IOException異常,常用成員方法見表13-4中的描述。表13-4 類中的常用成員方法:方法 描述 public int write(int b)將指定字節(jié)寫入此文件輸出流public int write(byte b)將b.length個字節(jié)從指定字節(jié)數(shù)組寫入此文件輸出流中public int write(byte b,int off,int len)將指定字節(jié)數(shù)組中從偏移量off開始的len個字節(jié)寫入此文件輸出流 public void close()關閉輸出流17例13.4讀文件和寫文件舉例。假設在D:有文件Li13_04.java,編程實現(xiàn)把該文件原樣復制后存放在C:

15、,文件名為Li13_04_。import java.io.*;class Li13_04 public static void main(String args) int length; byte buf=new byte1024; try in; out; in=new (d:Li13_04.java);/運行前要保證d:有Li13_04.java這個文件 out=new (c:Li13_04_); System.out.println(文件拷貝輸出成功。); while(length=in.read(buf,0,1024)!=-1) out.write(buf,0,length); cat

16、ch(IOException e) System.out.println(Error: +e); System.exit(-1); 1813.2 Reader與Writer類應用舉例 從JDK1.1開始,java.io包中加入了專門用于處理字符流輸入/輸出的類,它們的基類分別是抽象類Reader及抽象類Writer。1913.2.1 Reader和Writer Java提供了一系列用于處理字符流的接口和類,如Reader和Writer類,通過它們派生的子類對象來處理字符流。 Reader類和Writer類提供的方法分別見表13-5和表13-6中的描述,注意它們被調用時也會產(chǎn)生異常。20表13-

17、5 Reader類中的常用方法方法描述public int read()讀取單個字符。返回作為整數(shù)讀取的字符,范圍在0到65535 之間public int read(char cbuf)將字符讀入數(shù)組,cbuf是目標緩沖區(qū)public abstract int read(char cbuf,int off,int len)將字符讀入數(shù)組的某一部分,從off開始存放len個public long skip(long n)跳過n個字符public abstract void close()關閉輸入流21表13-6 Writer類中的常用方法public int write(int c)寫入單個字

18、符,c是要寫入字符的int值public int write(char cbuf)寫入字符數(shù)組,cbuf是要寫入的字符數(shù)組public int write(byte b,int off,int len)將指定字節(jié)數(shù)組中從偏移量off開始的len個字節(jié)寫入此文件輸出流public abstract void write(char cbuf,int off,int len)寫入字符數(shù)組的某一部分,cbuf是字符數(shù)組public void write(String str,int off,int len)寫入字符串的某一部分,str是要寫入的字符串public void write(String s

19、tr)寫入字符串public abstract void flush()刷新此流。如果此流已保存緩沖區(qū)中各種write()方法的任何字符,則立即將它們寫入預期目標public abstract void close()(刷新流后)關閉流2213.2.2 InputStreamReader和OutputStreamWriter InputStreamReader從輸入流中讀取字節(jié)數(shù)據(jù),并將其轉換為特定的平臺上的字符數(shù)據(jù),其構造方法為:public InputStreamReader(InputStream in) 其中參數(shù)in是InputStream的對象,該構造方法可以創(chuàng)建一個使用默認字符集的

20、InputStreamReader。public InputStreamReader(InputStream in,String enc) 創(chuàng)建使用指定字符集的InputStreamReader。InputStreamReader的成員方法描述見表13-7,注意這些方法在被調用時也會產(chǎn)生異常。23表13-7 InputStreamReader類中的常用方法方法描述public int read()讀取單個字符public int read(char cbuf,int off,int len)將字符讀入數(shù)組的某一部分,從off開始存放len個public boolean ready()告知是否準

21、備讀取此流。如果保證下一個 read() 不阻塞輸入,則返回 True,否則返回 falsepublic void close()關閉輸入流24 OutputStreamWriter將特定平臺的字符數(shù)據(jù)轉換為字節(jié)數(shù)據(jù),寫入到輸出流,其構造方法為:public OutputStreamWriter(OutputStream out) 其中參數(shù)out是OutputStream對象,該構造方法用來創(chuàng)建使用默認字符編碼的 OutputStreamWriter。public OutputStreamWriter(OutputStream out,String enc) 其中參數(shù)out是 OutputSt

22、ream對象,參數(shù)enc是字符串名稱,該構造方法創(chuàng)建使用指定字符集的 OutputStreamWriter。 OutputStreamWriter的成員方法描述見表13-8,注意這些方法在被調用時也會產(chǎn)生異常。25表13-8 OutputStreamWriter類中的常用方法方法描述public void write(int c)寫入單個字符,c是要寫入字符的int值public void write(char cbuf,int off,int len)寫入字符數(shù)組的某一部分,cbuf是字符數(shù)組public void write(String str,int off,int len)寫入字符串

23、的某一部分,str是要寫入的字符串public void flush()刷新該流的緩沖public void close()關閉流26例13.5讀字符流文件:從給定的輸入文件中讀取字符流并在標準終端顯示。import java.io.*;public class Li13_05 public static void main(String args)throws IOException int c; is; InputStreamReader ir; is=new (CharInput.java); ir=new InputStreamReader(is); System.out.printl

24、n(-程序開始-); while(c=ir.read()!=-1) System.out.print(char)c); System.out.println(-程序結束-); 27例13.6寫字符流文件:從標準終端上輸入字符并寫入字符輸出文件。import java.io.*;public class Li13_06 public static void main(String args)throws IOException int c; InputStreamReader ir=new InputStreamReader(System.in); os=new (c:/hhh.txt); Ou

25、tputStreamWriter or=new OutputStreamWriter(os); System.out.print(請輸入字符(輸入x結束,運行結束后請查看C:/hhh.txt):); while(c=ir.read()!=x) or.write(char)c); or.close(); os.close(); 28例13.7讀一行字符:從文件中按行讀出文件中的各個字符并在標準終端上輸出,文件名由命令行參數(shù)給出。import java.io.*;public class Li13_07 public static void main(String args) throws IOE

26、xception InputStream is=new (args0); InputStreamReader in=new InputStreamReader(is); BufferedReader br=new BufferedReader(in); String str; int c=0; while(str=br.readLine()!=null) /每次從文件中讀一行字符 System.out.println(str); 2913.3 InputStream與OutputStream類應用舉例 java.io包中包含的兩個基本的字節(jié)流類InputStream與OutputStream是

27、所有字節(jié)流的基類。它們提供的方法通常在子類中被覆蓋,以適合于特定的字節(jié)流的需要,提供最基本的輸入/輸出功能。3013.3.1 InputStream類 Inputstream抽象類中定義了所有輸入字節(jié)流都需要的方法,完成最基本的從輸入流讀入數(shù)據(jù)的功能:public int read()public int read(byte b)public int read(byte b,int off,int len)public int available()public long skip(long n)public void mark()public void reset()public boole

28、an mark supporeed()public void close()31 具體使用時,從InputStream派生的子類中創(chuàng)建對象,完成不同情況下的輸入操作。InputStream的常用子類如下:ByteArrayInputStream:把內存中的一個緩沖區(qū)作為InputStream使用;StringBufferInputStream:把一個String對象作為InputStream;:把一個文件作為InputStream,實現(xiàn)對文件的讀取操作;PipedInputStream:實現(xiàn)了pipe的概念,主要在線程中使用;SequenceInputStream:把多個InputStream

29、合并為一個InputStream。3213.3.2 OutputStream類 OutputStream抽象類中定義了所有字節(jié)輸出流都需要的方法,完成向輸出流寫入數(shù)據(jù)的功能。public void write(int b)public void write(byte b)public void write(byte b,int off,int len)public void flush()public void close()33 具體使用時,從OutputStream派生的子類中創(chuàng)建對象,完成不同情況下的輸出操作。OutputStream的常用子類如下:ByteArrayOutputStre

30、am:把信息存入內存中的一個緩沖區(qū)中;:把信息存入文件中;PipedOutputStream:實現(xiàn)了pipe的概念,主要在線程中使用;SequenceOutputStream:把多個OutputStream合并為一個OutputStream。34例13.8最基本的輸入輸出方法應用舉例:鍵盤讀入單個字節(jié)字符,多個字節(jié)字符并在屏幕輸出顯示。import java.io.*;public class Li13_08 public static void main(String args) try InputStream is=System.in; OutputStream os=System.out

31、; int i=is.read(); /讀入一個字節(jié)字符 os.write(char)i); /輸出該字節(jié)字符 os.write(n); byte b=new byte8; int c=is.read(b); /讀入的字節(jié)字符存入字節(jié)數(shù)組b中 for(i=0;ib.length;i+)35 os.write(bi); /輸出數(shù)組b中的字節(jié)字符 os.write(n); c=is.read(b,3,5); /讀入最多5個字節(jié)字符,存入數(shù)組b偏移3處 for(i=0;i b.length;i+) os.write(bi); /輸出數(shù)組b中的字節(jié)字符 os.write(n); is.close();

32、 os.close(); catch(IOException e) e.printStackTrace(); 36例13.9管道流類PipedInputStream和PipedOutputStream應用舉例。import java.io.*;/管道流的使用public class Li13_09 public static void main(String args)throws Exception PipedInputStream pis; PipedOutputStream pos; byte b; pis=new PipedInputStream(); pos=new PipedOut

33、putStream(pis); /流pos的輸出作為流pis的輸入 pos.write(a); /流pos的輸出 pos.write(b); /流pos的輸出 b=(byte)pis.read(); /流pis的輸入 System.out.println(b); b=(byte)pis.read(); /流pis的輸入 System.out.println(b); 3713.4 數(shù)據(jù)流應用舉例 DataInputStream 和DataOutputStream分別是過濾流FilterInputStream 和FilterOutputStream的子類,它們不僅能讀/寫字節(jié)流,而且能讀/寫Jav

34、a語言的基本數(shù)據(jù)類型,這些基本數(shù)據(jù)類型在流中的表示與在內存中一樣,不需轉換。 DataInputStream實現(xiàn)了接口DataInput中定義的與平臺無關的帶格式的讀操作,從而實現(xiàn)了不同數(shù)據(jù)類型的讀操作,其構造方法為: DataInputStream(InputStream in) 38public int read(byte b)public int read(byte b, int off, int len)public boolean readBoolean() public byte readByte() public char readChar() public double rea

35、dDouble() public float readFloat() public void readFully(byte b) public void readFully(byte b, int off, int len) public int readInt() public String readLine() public long readLong() public short readShort() public int readUnsignedByte() public int readUnsignedShort() public String readUTF() public s

36、tatic String readUTF(DataInput in) public int skipBytes(int n) DataInputStream類的成員方法如下:39 DataOutputStream實現(xiàn)了接口DataOutput中定義了與平臺無關的帶格式的寫操作,從而實現(xiàn)了對不同數(shù)據(jù)類型的寫操作,其構造方法為: DataOutputStream(OutputStream out) 40public void flush() public int size() public void write(byte b, int off, int len) public void write

37、(int b) public void writeBoolean(boolean v) public void writeByte(int v) public void writeBytes(String s) public void writeChar(int v) public void writeChars(String s) public void writeDouble(double v) public void writeFloat(float v) public void writeInt(int v) public void writeLong(long v) public v

38、oid writeShort(int v) public void writeUTF(String str) DataOutputStream類的成員方法如下:41例13.10數(shù)據(jù)流的使用:可以從數(shù)據(jù)輸入流中按各種數(shù)據(jù)類型讀數(shù)據(jù),也可以往數(shù)據(jù)輸出流中按各種數(shù)據(jù)類型寫數(shù)據(jù)。import java.io.*; /數(shù)據(jù)流的使用public class Li13_10 public static void main(String arg)throws Exception String f = c:/stu.dat; Student s=new Student(1000,95,true); fos =

39、new (f); DataOutputStream out = new DataOutputStream(fos);/ 構造數(shù)據(jù)輸入流對象 out.writeInt(s.id); /往數(shù)據(jù)輸出流中寫int型數(shù)據(jù)。 out.writeDouble(s.score); /往數(shù)據(jù)輸出流中double型寫數(shù)據(jù)。 out.writeBoolean(s.pass); /往數(shù)據(jù)輸出流寫boolean型數(shù)據(jù)。 out.close(); 42 fis = new (f); DataInputStream in = new DataInputStream(fis); int i = in.readInt(); /從數(shù)據(jù)輸入流中

溫馨提示

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

評論

0/150

提交評論