




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、第6章 Java輸入與輸出(I/O),信息科學(xué)與技術(shù)學(xué)院 軟件工程系 王建民 PhoneE_mail:,2,第 6 章 Java輸入與輸出(I/O),6.1 File類 6.2 流 6.3 字 節(jié) 流 6.4 字符流 6.5 RandomAccessFile類 6.6 過 濾 器 流 6.7 對象序列化(objectcserialization) 6.8 Scanner類,第 6 章 Java輸入與輸出(I/O),6.1 File類 6.2 流 6.3 四個基本輸入輸出流 6.4 節(jié)點(diǎn)流 6.5 處理流 6.6 RandomAccessFile類,3,4,6.1 Fi
2、le類,File類是一個與流無關(guān)的類。File類的對象可以獲取文件及其文件所在的目錄、文件的長度等信息。創(chuàng)建一個File對象的常用構(gòu)造方法有3種: (1)File(String pathname) (2)File(String path,String filename) (3)File(File file,String filename),5,File類,(1)File(String pathname) 該構(gòu)造方法通過指定的文件路徑字符串來創(chuàng)建一個新File實(shí)例對象。 語法: pathname:文件路徑字符串,包括文件名稱。就是將一個代表路徑的字符串轉(zhuǎn)換為抽象的路徑。,new File(fil
3、ename);,6,File類,(2)File(String path,String filename) 該構(gòu)造方法根據(jù)指定的父路徑字符串和子路徑字符串(包括文件名稱)創(chuàng)建File類的實(shí)例對象。 語法: path:父路徑字符串。 filename:子路徑字符串,不能為空。,new File(path, filename);,2、File類構(gòu)造器File(String path),Path可以是文件的完整路徑名,也可只有路徑而無文件名;路經(jīng)可以是絕對路徑,也可以是相對路徑;路徑或文件名可以是已存在的也可是新的,新的則被創(chuàng)建,舊的則被刷新。 例1:File file1=newFile(“f:jav
4、aaaa”); 在已存在的f:java目錄下新創(chuàng)建一個aaa目錄,使用的是絕對路徑,且只能創(chuàng)建一層新目錄。 例2:File file2=new File(“bbb”); 在當(dāng)前工作目錄下,創(chuàng)建bbb新目錄的文件對象,使用的是相對路徑 例3:File file3=new File(“f:javafile1.txt”); 使用絕對路徑,在已存在的f:java目錄下創(chuàng)建一個文本文件對象。,File類,7,8,File類,(3)File(File file,String filename) 該構(gòu)造方法根據(jù)指定的File類的父路徑和字符串類型的子路徑(包括文件名稱)創(chuàng)建File類的實(shí)例對象。 語法: f
5、ile:是父路徑對象。 filename:子路徑字符串。 File類包含了文件和文件夾的多種屬性和操作方法。常用的方法如下表所示。,new File(file,filename);,2、File類構(gòu)造器File (File dir,String name),例4: File file1=new File(“f:javaaaa”); File file6=new File(file1,”myfile.txt”); 【例6-1】,File類,9,10,第 6 章 Java輸入與輸出(I/O),6.1 File類 6.2 流 6.3 四個基本輸入輸出流 6.4 節(jié)點(diǎn)流 6.5 處理流 6.6 Ran
6、domAccessFile類,11,12,6.2 流,在Java中,流是從源到目的地的字節(jié)的有序序列; 流中的字節(jié)依據(jù)先進(jìn)先出,具有嚴(yán)格的順序,是一種順序存取方式。,Input stream(輸入流),程序-數(shù)據(jù)源(文件、內(nèi)存)-打開一個流-讀數(shù)據(jù),流是有方向的:從輸入流讀入-不能寫數(shù)據(jù),13,Output stream(輸出流),程序-數(shù)據(jù)-寫入流-保存到目的地(文件、內(nèi)存),流是有方向的:向輸出流寫入-不能讀數(shù)據(jù),14,流操作的過程,Reading: open a stream while more information read information close the stream
7、,Writing : open a stream while more information write information close the stream,15,6.2.1輸入/輸出流的分類,Java.io包中定義了多個流類型(類或抽象類)來實(shí)現(xiàn)輸入、輸出功能;可以從不同的角度對其進(jìn)行分類: 按數(shù)據(jù)流的方向不同可以分為輸入流和輸出流; 按處理數(shù)據(jù)單位不同可以分為字節(jié)流和字符流; 按照功能不同可以分為節(jié)點(diǎn)流和處理流。,16,輸入/輸出流,輸入流/輸出流以java程序?yàn)闃?biāo)準(zhǔn)。,輸入流,輸出流,17,字節(jié)流/字符流,按處理數(shù)據(jù)單位不同可以分為字節(jié)流和字符流; 字節(jié)流讀取的最小單位是一個字節(jié)
8、(1byte=8bit) 而字符流一次可以讀取一個字符(1char = 2byte = 16bit)。,18,節(jié)點(diǎn)流和處理流,節(jié)點(diǎn)流為可以從一個特定的數(shù)據(jù)源(節(jié)點(diǎn))讀寫數(shù)據(jù)(如:文件、內(nèi)存) 處理流是“連接”在已存在的流(節(jié)點(diǎn)流或處理流)之上,通過對數(shù)據(jù)的讀寫為程序提供強(qiáng)大的功能。,19,20,6.2.2 輸入輸出流,輸入輸出流一般分為4種: 字節(jié)輸入流 字節(jié)輸出流 字符輸入流 字符輸出流,21,字節(jié)輸入流,InputStream類是字節(jié)輸入流的抽象類,它是所有字節(jié)輸入流的父類,其各種子類實(shí)現(xiàn)了不同的數(shù)據(jù)輸入流。這些字節(jié)輸入流的繼承關(guān)系如下圖所示。,22,字節(jié)輸出流,OutputStream類
9、是字節(jié)輸出流的抽象類,它是所有字節(jié)輸出流的父類,其子類實(shí)現(xiàn)了不同數(shù)據(jù)的輸出流。繼承關(guān)系如下圖所示。,23,字符輸入流,Reader類是字符輸入流的抽象類,所有字符輸入流的實(shí)現(xiàn)都是它的子類。Java中字符輸入流的繼承關(guān)系如下圖所示。,24,字符輸出流,Writer類是字符輸出流的抽象類,所有字符輸出流的實(shí)現(xiàn)都是它的子類。Java中字符輸出流的繼承關(guān)系如下圖所示。,25,6.2 字節(jié)流與字符流,字節(jié)流是以字節(jié)為單位來處理數(shù)據(jù)的,由于字節(jié)流不會對數(shù)據(jù)做任何轉(zhuǎn)換,因此用來處理二進(jìn)制的數(shù)據(jù)。,以字符為導(dǎo)向的stream基本上對有與之相對應(yīng)的以字節(jié)為導(dǎo)向的stream。 兩個對應(yīng)類實(shí)現(xiàn)的功能相同,只是在操
10、作時的導(dǎo)向不同 如 CharArrayReader:和ByteArrayInputStream的作用都是把內(nèi)存中的一個緩沖區(qū)作為InputStream使用,所不同的是前者每次從內(nèi)存中讀取一個字節(jié)的信息,而后者每次從內(nèi)存中讀取一個字符。,6.2 字節(jié)流與字符流,26,27,第 6 章 Java輸入與輸出(I/O),6.1 File類 6.2 流 6.3 四個基本輸入輸出流 6.4 節(jié)點(diǎn)流 6.5 處理流 6.6 RandomAccessFile類 6.7 對象序列化(objectcserialization) 6.8 Scanner類,28,6.3.1 InputStream類與OutputSt
11、ream類,InputStream類是所有字節(jié)輸入流的父類,它定義了操作輸入流的各種方法。常用方法如下表所示。,29,InputStream類與OutputStream類,OutputStream類是所有字節(jié)輸出流的父類,它定義了輸出流的各種操作方法。常用的方法如下表所示。,30,6.3.2 字符流,字符流(charactercstreams)用于處理字符數(shù)據(jù)的讀取和寫入,它以字符為單位。 Reader類和Writer類是字符流的抽象類,它們定義了字符流讀取和寫入的基本方法,各個子類會依其特點(diǎn)實(shí)現(xiàn)或覆蓋這些方法。,31,6.3.2 Reader類與Writer類,Reader類是所有字符輸入流
12、的父類,它定義了操作字符輸入流的各種方法。常用方法如下表所示。,32,Reader類與Writer類,Writer類是所有字符輸出流的父類,它定義了操作輸出流的各種方法。常用方法如下表所示。,6.3.2、標(biāo)準(zhǔn)輸入/輸出,在java 中: “標(biāo)準(zhǔn)輸入”是System.in對象, “標(biāo)準(zhǔn)輸出”是System.out 對象, “標(biāo)準(zhǔn)錯誤輸出” 是System.err對象。 每當(dāng)main方法被執(zhí)行時,就自動生成上述三個對象 System.out和System.err已預(yù)封裝成一個PrintStream對象,能直接使用。 System.in是一個原始的InputStream,未進(jìn)行任何封裝處理,必須事先
13、封裝System.in,否則不能從中讀取數(shù)據(jù)。例如:我們希望用readLine()每次從標(biāo)準(zhǔn)輸入中讀取一行輸入信息,然后顯示出來,就需要將System.in封裝到一個DataInputStream或者BufferedReader中。,33,1、標(biāo)準(zhǔn)輸入/輸出示例,34,19:17,35,6.3.3 輸入/輸出流體系,35,import java.io.*; public class StringDemo public static void main(String args) String s; InputStreamReader ir; BufferedReader in; ir = new
14、 InputStreamReader( );/創(chuàng)建標(biāo)準(zhǔn)的輸入/輸出流 in = new (ir); try do s= ; /從鍵盤讀取一行字符串 if (s!=null) System.out.println(“Reader: ”+s);/輸出讀取數(shù)據(jù) while ; /判斷輸入“Exit”結(jié)束輸入 catch(Exception e) ,示例:創(chuàng)建StringDemo類,實(shí)現(xiàn)字符串的輸入輸出。,System.in,BufferedReader,in.readLine(),(!(s.equals( exit),?程序結(jié)束了嗎。丟了哪一步?,36,37,第 6 章 Java輸入與輸出(I/O)
15、,6.1 File類 6.2 流 6.3 四個基本輸入輸出流 6.4 節(jié)點(diǎn)流 6.5 處理流 6.6 RandomAccessFile類 6.7 對象序列化(objectcserialization) 6.8 Scanner類,38,6.4.1 FileInputStream類,FileInputStream類是InputStream類的子類。它實(shí)現(xiàn)了文件的讀取,是文件字節(jié)輸入流。該類適用于比較簡單的文件讀取,該類的所有方法都是從InputStream類繼承并重寫的。創(chuàng)建文件字節(jié)輸入流常用的構(gòu)造方法有兩種: FileInputStream(String filePath) FileInputS
16、tream(File file),39,FileInputStream類,(1)FileInputStream(String filePath) 該構(gòu)造方法根據(jù)指定的文件名稱和路徑,創(chuàng)建FileInputStream類的實(shí)例對象。 語法: filePath:文件的絕對路徑或相對路徑。,new FileInputStream (filePath);,40,FileInputStream類,(2)FileInputStream(File file) 該構(gòu)造方法使用File類型的文件對象創(chuàng)建FileInputStream類的實(shí)例對象。 語法: file:File文件類型的實(shí)例對象。 【例6-2】,n
17、ew FileInputStream (file);,41,6.4.2 FileOutputStream類,FileOutputStream類是OutputStream類的子類。它實(shí)現(xiàn)了文件的寫入,能夠以字節(jié)形式寫入文件中,該類的所有方法都是從OutputStream類繼承并重寫的。創(chuàng)建文件字節(jié)輸出流常用的構(gòu)造方法有兩種: FileOutputStream(String filePath) FileOutputStream(File file),42,FileOutputStream類,(1)FileOutputStream(String filePath) 該構(gòu)造方法根據(jù)指定的文件名稱和路徑
18、,創(chuàng)建關(guān)聯(lián)該文件的FileOutputStream類的實(shí)例對象。 語法: filePath:文件的絕對路徑或相對路徑。,new FileOutputStream (filePath);,43,FileOutputStream類,(2)FileOutputStream(File file) 該構(gòu)造方法使用File類型的文件對象,創(chuàng)建與該文件關(guān)聯(lián)的FileOutputStream類的實(shí)例對象。 語法: file:File文件類型的實(shí)例對象。在file后面,加true會對原有內(nèi)容進(jìn)行追加,不加true會將原有內(nèi)容覆蓋。 【例6-3】,new FileOutputStream (file);,44,6
19、.4.2 FileReader類,FileReader類是Reader類的子類,它實(shí)現(xiàn)了從文件中讀出字符數(shù)據(jù),是文件字符輸入流。該類的所有方法都是從Reader類中繼承來的。FileReader類的常用構(gòu)造方法有兩種: FileReader(String filePath) FileReader(File file),45,6.4.3 FileReader類,(1)FileReader(String filePath) 該構(gòu)造方法根據(jù)指定的文件名稱和路徑,創(chuàng)建FileReader類的實(shí)例對象。 語法如下: filePath:文件的絕對路徑或相對路徑。,new FileReader(filePa
20、th);,46,FileReader類,(2)FileReader(File file) 該構(gòu)造方法使用File類型的文件對象創(chuàng)建FileReader類的實(shí)例對象。 語法如下: file:File文件類型的實(shí)例對象。,new FileReader(file);,47,FileReader類,例如,利用FileReader讀取文件“Example3.txt”的內(nèi)容,輸出到控制臺上程序代碼為:,try File f=new File(C:,Example3.txt); FileReader fr=new FileReader(f);/ 創(chuàng)建文件字符輸入流 char data=new char512
21、; int rs=0; while(rs=fr.read(data)0)/ 在循環(huán)中讀取數(shù)據(jù) String str=new String(data,0,rs); System.out.println(str); catch (Exception e) e.printStackTrace(); ,48,6.4.4 FileWriter類,FileWriter類是Writer類的子類,它實(shí)現(xiàn)了將字符數(shù)據(jù)寫入文件中,是文件字符輸出流。該類的所有方法都是從Writer類中繼承來的。FileWriter類的常用構(gòu)造方法有兩種: FileWriter(String filePath) FileWriter
22、(File file),49,FileWriter類,(1)FileWriter(String filePath) 該構(gòu)造方法根據(jù)指定的文件名稱和路徑,創(chuàng)建關(guān)聯(lián)該文件的FileWriter類的實(shí)例對象。 語法如下:,new FileWriter(filePath);,50,FileWriter類,(2)FileWriter(File file) 該構(gòu)造方法使用File類型的文件對象,創(chuàng)建與該文件關(guān)聯(lián)的FileWriter類的實(shí)例對象。 語法如下:,new FileWriter(file);,51,FileWriter類,例如, “Example3.txt”的內(nèi)容復(fù)制到文件“Example6.t
23、xt”中。具體代碼為:,try File f=new File(C:,Example6.txt); if (!f.exists()/ 如果文件不存在 f.createNewFile();/ 創(chuàng)建新文件 FileReader fr=new FileReader(C:Example3.txt);/ 創(chuàng)建文件字符輸入流 FileWriter fWriter=new FileWriter(f);/ 創(chuàng)建文件字符輸出流 int is; while(is=fr.read() != -1) fWriter.write(is);/ 將數(shù)據(jù)寫入輸出流 fr.close(); fWriter.close(); c
24、atch (Exception e) e.printStackTrace(); ,52,第 6 章 Java輸入與輸出(I/O),6.1 File類 6.2 流 6.3 四個基本輸入輸出流 6.4 節(jié)點(diǎn)流 6.5 處理流與轉(zhuǎn)換流 6.6 RandomAccessFile類,53,6.5.1 BufferedReader類,BufferedReader類是Reader類的子類,使用該類可以以行為單位讀取數(shù)據(jù)。 BufferedReader類的主要構(gòu)造方法為: 該構(gòu)造方法使用Reader類的對象,創(chuàng)建一個BufferReader對象。 語法如下:,new BufferedReader(in);,B
25、ufferedReader(Reader in),54,BufferedReader類,BufferedReader 類中提供了一個ReaderLine()方法,Reader類中沒有此方法,該方法能夠讀取文本行。例如:,FileReader fr; try fr = new FileReader(C:Example6.txt); BufferedReader br = new BufferedReader(fr); String aline; while (aline=br.readLine() != null)/按行讀取文本 String str=new String(aline); fr.
26、close(); br.close(); catch (Exception e) e.printStackTrace(); ,55,6.5.2 BufferedWriter類,BufferedWriter類是Writer類的子類,該類可以以行為單位寫入數(shù)據(jù)。BufferedWriter類常用的構(gòu)造方法為: 該構(gòu)造方法使用Writer類的對象,來創(chuàng)建一個BufferWriter對象。 語法如下:,new BufferedReader(out);,BufferedWriter(Writer out),56,BufferedWriter類,BufferedWriter類提供了一個newLine()方
27、法,Writer類中沒有此方法。該方法是換行標(biāo)記。例如: 【例6-6】,File file=new File(C:,Example6.txt); FileWriter fos; try fos = new FileWriter(file,true); BufferedWriter bw=new BufferedWriter(fos); bw.write(Example); bw.newLine(); bw.write(Example); bw.close(); catch (IOException e) e.printStackTrace(); ,6.5.1 PrintStream類,Prin
28、tStream是打印輸出流,它可以直接輸出各種類型的數(shù)據(jù)。創(chuàng)建打印輸出流常用的構(gòu)造方法為: 該構(gòu)造方法使用OutputStream類的對象,創(chuàng)建一個PrintStream對象。 語法如下:,new PrintStream(out);,PrintStream(OutputStream out),57,PrintStream類,PrintStream類常用的方法如下表所示。 【例6-7】,58,6.5.3 InputStreamReader類,InputStreamReader 是字節(jié)流通向字符流的橋梁。它可以根據(jù)指定的編碼方式,將字節(jié)輸入流轉(zhuǎn)換為字符輸入流。創(chuàng)建字符輸入流常用的構(gòu)造方法有兩種:
29、InputStreamReader(InputStream in) InputStreamReader(InputStream in, String cname),59,InputStreamReader類,(1)InputStreamReader(InputStream in) 該構(gòu)造方法使用默認(rèn)字符集創(chuàng)建InputStreamReader類的實(shí)例對象。 語法如下: in:字節(jié)流類的實(shí)例對象。,new InputStreamReader(in);,60,InputStreamReader類,(2)InputStreamReader(InputStream in, String cname)
30、該構(gòu)造方法使用已命名的字符編碼方式創(chuàng)建InputStreamReader類的實(shí)例對象。 語法如下: cname:使用的編碼方式名。 InputStreamReader類常用的方法如下表所示。,new InputStreamReader(in,cname);,61,InputStreamReader類,【例6-4】,62,6.5.4 OutputStreamWriter類,OutputStreamWriter 是字節(jié)流通向字符流的橋梁。寫出字節(jié),并根據(jù)指定的編碼方式,將之轉(zhuǎn)換為字符流。創(chuàng)建字符輸出流常用的構(gòu)造方法有兩種。 OutputStreamWriter(OutputStream out)
31、OutputStreamWriter(OutputStream out,String cname),63,OutputStreamWriter類,(1)OutputStreamWriter(OutputStream out) 該構(gòu)造方法使用默認(rèn)字符集創(chuàng)建OutputStreamWriter類的實(shí)例對象。 語法如下: out:字節(jié)流類的實(shí)例對象。,new OutputStreamReader(out);,64,OutputStreamWriter類,(2)OutputStreamWriter(OutputStream out,String cname) 該構(gòu)造方法使用已命名的字符編碼方式創(chuàng)建Ou
32、tputStreamWriter類的實(shí)例對象。 語法如下: cname:使用的編碼方式名。 OutputStreamReader類常用的方法如下表所示:,new OutputStreamWriter(out,cname);,65,OutputStreamWriter類,【例6-5】,66,67,第 6 章 Java輸入與輸出(I/O),6.1 File類 6.2 流 6.3 四個基本輸入輸出流 6.4 節(jié)點(diǎn)流 6.5 處理流與轉(zhuǎn)換流 6.6 RandomAccessFile類,6.6 RandomAccessFile類,使用RandomAccessFile類可以讀取任意位置數(shù)據(jù)的文件。Rand
33、omAccessFile類既不是輸入流類的子類,也不是輸出流類的子類。RandomAccessFile類常用的構(gòu)造方法有兩種。 RandomAccessFile(String name,String mode) RandomAccessFile(File file,String mode),68,RandomAccessFile類,(1)RandomAccessFile(String name,String mode) 語法如下: name:和系統(tǒng)相關(guān)的文件名。 mode:用來決定創(chuàng)建的流對文件的訪問權(quán)利,它可以是r、rw、rws或rwd,r代表只讀, rw代表可讀寫,rws代表同步寫入,rw
34、d代表將更新同步寫入。,new RandomAccessFile(name,mode);,69,RandomAccessFile類,(2)RandomAccessFile(File file,String mode) 語法如下: file:一個File類的對象。 RandomAccessFile類常用的方法如下表所示:,new RandomAccessFile(file,mode);,70,RandomAccessFile類,71,RandomAccessFile類,利用上述方法顯示文件本身源代碼的執(zhí)行過程如下: 【例6-9】,try File f=new File(C:,Example8.txt); RandomAccessFile raf=new RandomAccessFile(f,rw); /創(chuàng)建隨機(jī)訪問文件為讀寫 long filepoint=0;/定義文件總長度變量 lo
溫馨提示
- 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 遼寧音視頻系統(tǒng)施工方案
- 魚塘清淤固化工程施工方案
- 消防專項(xiàng)活動總結(jié)
- 消防安全公開課心得體會14篇
- 電子廠生產(chǎn)安全生產(chǎn)培訓(xùn)
- 管廊預(yù)制管涵安裝施工方案
- 黃金購銷合同
- 衛(wèi)生間潮濕美縫施工方案
- 2024年保潔主管個人工作總結(jié)
- 深水中承臺圍堰施工方案
- 新教科版一年級科學(xué)下冊第二單元第5課《它們吃什么》課件
- 坡面土壤侵蝕過程模擬-深度研究
- 互聯(lián)網(wǎng)護(hù)理服務(wù)典型案例
- 礦泉水購銷合同范本2025年
- PLC培訓(xùn)課件教學(xué)課件
- 南京財(cái)經(jīng)大學(xué)C語言期末(共六卷)含答案解析
- 課題申報書:極端雨雪天氣下城市交通多層動態(tài)網(wǎng)絡(luò)韌性建模及優(yōu)化研究
- 2024北京東城初一(上)期末語文試卷及答案
- 2025年煤礦從業(yè)人員安全培訓(xùn)考試題庫
- 四年級數(shù)學(xué)(四則混合運(yùn)算帶括號)計(jì)算題專項(xiàng)練習(xí)與答案
- 壓鑄車間生產(chǎn)管理制度(4篇)
評論
0/150
提交評論