




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、深圳職業(yè)技術(shù)學(xué)院深圳職業(yè)技術(shù)學(xué)院主講教師:袁梅冷主講教師:袁梅冷 2021-05-15電信學(xué)院電信學(xué)院-軟件工程系軟件工程系本單元教學(xué)內(nèi)容 輸入輸出流基本概念輸入輸出流基本概念 輸入輸出節(jié)點(diǎn)流輸入輸出節(jié)點(diǎn)流 輸入輸出過濾流輸入輸出過濾流 文件的隨機(jī)讀寫文件的隨機(jī)讀寫 文件與目錄管理文件與目錄管理流的概念 大多數(shù)應(yīng)用程序都需要與外部設(shè)備進(jìn)行數(shù)據(jù)交大多數(shù)應(yīng)用程序都需要與外部設(shè)備進(jìn)行數(shù)據(jù)交換,最常見的外部設(shè)備包含磁盤,網(wǎng)絡(luò),鍵盤換,最常見的外部設(shè)備包含磁盤,網(wǎng)絡(luò),鍵盤和顯示器等。和顯示器等。IO就是指應(yīng)用程序?qū)@些設(shè)備的就是指應(yīng)用程序?qū)@些設(shè)備的數(shù)據(jù)輸入和輸出數(shù)據(jù)輸入和輸出 在在Java中,我們將這
2、些輸入輸出的數(shù)據(jù)都看作中,我們將這些輸入輸出的數(shù)據(jù)都看作數(shù)據(jù)流。即一串連續(xù)不斷的數(shù)據(jù)的集合,就像數(shù)據(jù)流。即一串連續(xù)不斷的數(shù)據(jù)的集合,就像水管里的水流。水管里的水流。 這樣做有什么好處?這樣做有什么好處? 屏蔽了數(shù)據(jù)源與數(shù)據(jù)宿的多樣性與復(fù)雜性,給屏蔽了數(shù)據(jù)源與數(shù)據(jù)宿的多樣性與復(fù)雜性,給程序提供了一個(gè)統(tǒng)一的操作界面和操作流程。程序提供了一個(gè)統(tǒng)一的操作界面和操作流程。輸入輸出流的基本概念輸入流:讀取數(shù)據(jù)時(shí)與數(shù)據(jù)源之間建立的數(shù)據(jù)通道;輸出流:輸出數(shù)據(jù)時(shí)與數(shù)據(jù)宿(數(shù)據(jù)槽)之間建立的數(shù)據(jù)通道。輸出流輸出流輸入流輸入流如果我們要將文件如果我們要將文件A的內(nèi)容寫入文件的內(nèi)容寫入文件B,那么要讀取文件那么要讀取
3、文件A的內(nèi)容和寫入文件的內(nèi)容和寫入文件B時(shí),我們分別需要建立什么流?時(shí),我們分別需要建立什么流?流的分類 按功能劃分:按功能劃分: 輸入流輸入流 輸出流輸出流 按流中的數(shù)據(jù)類型劃分:按流中的數(shù)據(jù)類型劃分: 字節(jié)流:以字節(jié)為傳輸單位字節(jié)流:以字節(jié)為傳輸單位 字符流:以字符為傳輸單位,特別用于文本數(shù)字符流:以字符為傳輸單位,特別用于文本數(shù)據(jù)據(jù) 按建立方式和工作原理劃分:按建立方式和工作原理劃分: 節(jié)點(diǎn)流:程序與輸入源或輸出宿之間直接建立節(jié)點(diǎn)流:程序與輸入源或輸出宿之間直接建立的流的流 過濾流:以某一個(gè)節(jié)點(diǎn)流作為流的來源,并對(duì)過濾流:以某一個(gè)節(jié)點(diǎn)流作為流的來源,并對(duì)其進(jìn)行一些加工處理的流。能有效改善
4、輸入其進(jìn)行一些加工處理的流。能有效改善輸入/輸輸出操作出操作基本流類 字節(jié)流字節(jié)流 輸入字節(jié)流:輸入字節(jié)流:InputStream 輸出字節(jié)流:輸出字節(jié)流:OutputStream 字符流字符流 輸入字符流:輸入字符流:Reader 輸出字符流:輸出字符流:Writer 以上四個(gè)基本流類都是抽象類,只是為具體其以上四個(gè)基本流類都是抽象類,只是為具體其子類規(guī)定要實(shí)現(xiàn)的方法。子類規(guī)定要實(shí)現(xiàn)的方法。 由其具體子類負(fù)責(zé)創(chuàng)建與各種數(shù)據(jù)源或數(shù)據(jù)宿由其具體子類負(fù)責(zé)創(chuàng)建與各種數(shù)據(jù)源或數(shù)據(jù)宿的數(shù)據(jù)流。的數(shù)據(jù)流。InputStream相關(guān)方法 3個(gè)讀取數(shù)據(jù)的方法個(gè)讀取數(shù)據(jù)的方法 int read() /將所讀字節(jié)
5、以整數(shù)類型返回,當(dāng)沒有字節(jié)將所讀字節(jié)以整數(shù)類型返回,當(dāng)沒有字節(jié)時(shí)返回時(shí)返回1 int read(byte buffer) /返回的所讀字節(jié)數(shù),無時(shí)返返回的所讀字節(jié)數(shù),無時(shí)返回回1 int read(byte buffer,int offset,int length) 其它方法其它方法 void close()OutputStream相關(guān)的方法 3個(gè)寫數(shù)據(jù)的方法個(gè)寫數(shù)據(jù)的方法 void write(int c) void write(byte buffer) void write(byte buffer int offset,int length) 其它方法其它方法 void close() v
6、oid flush()舉例 使用字節(jié)流進(jìn)行文件的拷貝例使用字節(jié)流進(jìn)行文件的拷貝例5_75_7 1 1。分析。分析 要實(shí)現(xiàn)文件拷貝,必須有兩個(gè)文件,一個(gè)要實(shí)現(xiàn)文件拷貝,必須有兩個(gè)文件,一個(gè)為源文件,另一個(gè)為目標(biāo)文件為源文件,另一個(gè)為目標(biāo)文件 要從源文件中讀取數(shù)據(jù),我們需要?jiǎng)?chuàng)建一要從源文件中讀取數(shù)據(jù),我們需要?jiǎng)?chuàng)建一個(gè)輸入流個(gè)輸入流 要向目標(biāo)文件寫入數(shù)據(jù),我們需要?jiǎng)?chuàng)建一要向目標(biāo)文件寫入數(shù)據(jù),我們需要?jiǎng)?chuàng)建一個(gè)輸出流個(gè)輸出流 2 2。字節(jié)文件流:用來構(gòu)建與文件間的字。字節(jié)文件流:用來構(gòu)建與文件間的字節(jié)流節(jié)流 文件輸入流:文件輸入流:FileInputStreamFileInputStream 文件輸出流
7、:文件輸出流:FileOutputStreamFileOutputStream 如:如:FileOutputStream file=new FileOutputStream file=new FileOutputStream(“myFile.txt”); FileOutputStream(“myFile.txt”); 小結(jié) 使用流進(jìn)行輸入使用流進(jìn)行輸入/輸出操作的基本步驟:輸出操作的基本步驟: 導(dǎo)入相應(yīng)的流類導(dǎo)入相應(yīng)的流類 ,如,如import java.io.*; 創(chuàng)建相應(yīng)的流對(duì)象創(chuàng)建相應(yīng)的流對(duì)象 使用流對(duì)象進(jìn)行數(shù)據(jù)的輸入使用流對(duì)象進(jìn)行數(shù)據(jù)的輸入/輸出操作處理輸出操作處理 關(guān)閉流對(duì)象關(guān)閉流對(duì)
8、象 FileInputStream是是InputStream類的子類,是類的子類,是一種字節(jié)輸入流,注意他的命名方式一種字節(jié)輸入流,注意他的命名方式 FileOutputStream是是OutputStream類的子類,類的子類,是一種字節(jié)輸出流,注意他的命名方式是一種字節(jié)輸出流,注意他的命名方式字符節(jié)點(diǎn)流 Java中的字符是中的字符是Unicode編碼,是雙字節(jié),而編碼,是雙字節(jié),而InputStream和和OutputStream是用來處理單字是用來處理單字節(jié)的,在處理字符文本時(shí)不太方便,節(jié)的,在處理字符文本時(shí)不太方便,Java就為就為字符文本的輸入輸出專門提供了一套單獨(dú)的類。字符文本的輸
9、入輸出專門提供了一套單獨(dú)的類。 Reader、Writer與與InputStream、OutputStream相對(duì)應(yīng),也是兩個(gè)抽象類相對(duì)應(yīng),也是兩個(gè)抽象類Reader的相關(guān)方法 3個(gè)讀數(shù)據(jù)方法個(gè)讀數(shù)據(jù)方法 int read() int read(char cbuf) int read(char cbuf,int offset,int length) 其它方法其它方法 void close()Writer的相關(guān)常用方法 5個(gè)讀方法個(gè)讀方法 void write(int c) void write(char cbuf) void write(char cbuf,int offset,int len
10、gth) void write(String string) void write(String string,int offset,int length) 其它方法其它方法 void close()舉例 使用字符流實(shí)現(xiàn)文本文件內(nèi)容顯示例使用字符流實(shí)現(xiàn)文本文件內(nèi)容顯示例5_85_8 1 1。分析。分析 程序要求將文本文件的內(nèi)容顯示到屏幕程序要求將文本文件的內(nèi)容顯示到屏幕上上 要從文本文件中讀取數(shù)據(jù),我們需要?jiǎng)?chuàng)要從文本文件中讀取數(shù)據(jù),我們需要?jiǎng)?chuàng)建一個(gè)字符文件輸入流建一個(gè)字符文件輸入流 要向屏幕輸出數(shù)據(jù),我們需要有一個(gè)輸要向屏幕輸出數(shù)據(jù),我們需要有一個(gè)輸出流出流System.outSystem.o
11、ut) 2 2。字符文件流:用來構(gòu)建與文件間的字。字符文件流:用來構(gòu)建與文件間的字符流符流 文件輸入流:文件輸入流:FileReaderFileReader 文件輸出流:文件輸出流:FileWriterFileWriter 如:如:FileReader file=new FileReader file=new FileReader(“myFile.txt”); FileReader(“myFile.txt”); 小結(jié) 操作的基本步驟:操作的基本步驟: 導(dǎo)入相應(yīng)的流類導(dǎo)入相應(yīng)的流類 ,如,如import java.io.*; 創(chuàng)建相應(yīng)的流對(duì)象創(chuàng)建相應(yīng)的流對(duì)象 使用流對(duì)象進(jìn)行數(shù)據(jù)的輸入使用流對(duì)象進(jìn)
12、行數(shù)據(jù)的輸入/輸出操作處理輸出操作處理 關(guān)閉流對(duì)象關(guān)閉流對(duì)象 FileReader是是Reader類的子類,是一種字符輸類的子類,是一種字符輸入流,注意他的命名方式入流,注意他的命名方式 FileWriter是是Writer類的子類,是一種字符輸出類的子類,是一種字符輸出流,注意他的命名方式流,注意他的命名方式試一試 使用字符流實(shí)現(xiàn)文本文件的拷貝,并同使用字符流實(shí)現(xiàn)文本文件的拷貝,并同時(shí)將文本文件內(nèi)容顯示在屏幕上,并統(tǒng)計(jì)文本時(shí)將文本文件內(nèi)容顯示在屏幕上,并統(tǒng)計(jì)文本文件的字符數(shù),源文件與目標(biāo)文件名均以命令文件的字符數(shù),源文件與目標(biāo)文件名均以命令行參數(shù)形式提供。行參數(shù)形式提供。過濾流 上次課,我們
13、接觸到許多節(jié)點(diǎn)流類,他們可以上次課,我們接觸到許多節(jié)點(diǎn)流類,他們可以以字節(jié)或字符為傳輸單位來傳輸數(shù)據(jù)以字節(jié)或字符為傳輸單位來傳輸數(shù)據(jù) FileOutputStream向文件中寫入字節(jié)向文件中寫入字節(jié) FileWriter向文件中寫入字符向文件中寫入字符 那么,如果我們要向文件中寫入那么,如果我們要向文件中寫入double類型的類型的數(shù)據(jù),改怎么做呢?數(shù)據(jù),改怎么做呢? 先將先將double類型的數(shù)據(jù)轉(zhuǎn)換為字節(jié)數(shù)組,再將類型的數(shù)據(jù)轉(zhuǎn)換為字節(jié)數(shù)組,再將字節(jié)數(shù)組寫入到文件中字節(jié)數(shù)組寫入到文件中 那么有沒有簡(jiǎn)便的方法呢?那么有沒有簡(jiǎn)便的方法呢?如何向文件中寫入基本數(shù)據(jù)類型例59)import java
14、.io.*;class DataOutpublic static void main(String args) throws IOExceptionFileOutputStream fout=new FileOutputStream(data.txt);DataOutputStream out=new DataOutputStream(fout);String items=面包面包,筆筆,被子被子,牙膏牙膏,毛巾毛巾;int units=5,2,1,2,3;float prices=1.5f,2.8f,125f,7.2f,5.6f;for(int i=0;iitems.length;i+)ou
15、t.writeUTF(itemsi);out.writeChar(t);out.writeFloat(pricesi);out.writeChar(t);out.writeInt(unitsi);out.writeChar(t);out.close();使用DataInputStream從文件中讀入基本類型數(shù)據(jù)看程序例看程序例5-10過濾流的概念和特點(diǎn) DataOutputStream實(shí)際上是一個(gè)中間類,在實(shí)際上是一個(gè)中間類,在它內(nèi)部,將其他數(shù)據(jù)類型轉(zhuǎn)換成字節(jié)數(shù)組,然它內(nèi)部,將其他數(shù)據(jù)類型轉(zhuǎn)換成字節(jié)數(shù)組,然后調(diào)用底層的節(jié)點(diǎn)流類將這個(gè)字節(jié)數(shù)組寫入目后調(diào)用底層的節(jié)點(diǎn)流類將這個(gè)字節(jié)數(shù)組寫入目標(biāo)設(shè)備。
16、我們將這種中間類稱為過濾流類標(biāo)設(shè)備。我們將這種中間類稱為過濾流類程序程序方法方法C方法方法B方法方法A方法方法1目標(biāo)設(shè)備目標(biāo)設(shè)備包裝流類包裝流類節(jié)點(diǎn)流類節(jié)點(diǎn)流類過濾流的特點(diǎn) 以節(jié)點(diǎn)流為基礎(chǔ)以節(jié)點(diǎn)流為基礎(chǔ) 當(dāng)創(chuàng)建一個(gè)過濾流對(duì)象時(shí),必須指定它要調(diào)用當(dāng)創(chuàng)建一個(gè)過濾流對(duì)象時(shí),必須指定它要調(diào)用的那個(gè)的底層對(duì)象。如:的那個(gè)的底層對(duì)象。如:DataOutputStream的構(gòu)造器方法:的構(gòu)造器方法:public DataOutputStreamOutputStream out) 提供了一些附加功能提供了一些附加功能 如如BufferedOutputStream也是基于也是基于OutputStream類的過濾
17、流類,它提供了輸出緩類的過濾流類,它提供了輸出緩沖功能沖功能 既然既然BufferedOutputStream是是OutputStream的子類,那么,的子類,那么,DataOutputStream的構(gòu)造器的構(gòu)造器方法中是否可以傳入方法中是否可以傳入BufferedOutputStream類型的對(duì)象作為參數(shù)呢?類型的對(duì)象作為參數(shù)呢?實(shí)戰(zhàn)演習(xí)1編程從鍵盤輸入若干名學(xué)生的課程成績(jī)信息編程從鍵盤輸入若干名學(xué)生的課程成績(jī)信息學(xué)號(hào)、姓名與課程成績(jī)),并將該信息保存學(xué)號(hào)、姓名與課程成績(jī)),并將該信息保存在文件在文件studentscore.dat中。中。2編程從上題中的編程從上題中的studentscor
18、e.dat文件中讀出文件中讀出學(xué)生課程成績(jī)信息并在屏幕上顯示出來,并計(jì)學(xué)生課程成績(jī)信息并在屏幕上顯示出來,并計(jì)算學(xué)生的平均成績(jī)、統(tǒng)計(jì)不及格人數(shù)。算學(xué)生的平均成績(jī)、統(tǒng)計(jì)不及格人數(shù)。構(gòu)造帶緩沖的文件數(shù)據(jù)輸入/輸出流字符過濾流 DataOutputStream以以O(shè)utputStream字節(jié)節(jié)點(diǎn)字節(jié)節(jié)點(diǎn)流為基礎(chǔ),因此屬于字節(jié)過濾流流為基礎(chǔ),因此屬于字節(jié)過濾流 那么以字符節(jié)點(diǎn)流那么以字符節(jié)點(diǎn)流Reader、Writer為基礎(chǔ)的過為基礎(chǔ)的過濾流,則稱為字符過濾流濾流,則稱為字符過濾流 我們前面用到的我們前面用到的BufferedReader就是就是 它提供了輸出緩沖功能它提供了輸出緩沖功能,還增加了對(duì)整
19、行字符的還增加了對(duì)整行字符的處理方法處理方法readLine() 調(diào)試運(yùn)行例調(diào)試運(yùn)行例511) 使用使用BufferedReader和和BufferedWriter實(shí)現(xiàn)文實(shí)現(xiàn)文本文件的按行拷貝本文件的按行拷貝字符過濾流InputStreamReader和OutputStreamWriter類 InputStreamReader類和類和OutputStreamWriter類是兩個(gè)較為特殊的流類,主要用來將字節(jié)流類是兩個(gè)較為特殊的流類,主要用來將字節(jié)流轉(zhuǎn)換為字符流,通常將其視為在字節(jié)流和字符轉(zhuǎn)換為字符流,通常將其視為在字節(jié)流和字符流中搭建的一座流中搭建的一座“橋橋”??闯绦蚶闯绦蚶?-12Pri
20、ntWriter類DataOutputStream提供了將提供了將Java各種類型數(shù)據(jù)輸出的各種類型數(shù)據(jù)輸出的方法,但是將各種數(shù)據(jù)以二進(jìn)制形式輸出的,我們無法方法,但是將各種數(shù)據(jù)以二進(jìn)制形式輸出的,我們無法進(jìn)行方便的查看。而我們使用進(jìn)行方便的查看。而我們使用PrintWrtier類的類的print()方方法和法和println()方法可以輕松的實(shí)現(xiàn)將方法可以輕松的實(shí)現(xiàn)將Java的各種類型數(shù)的各種類型數(shù)據(jù)轉(zhuǎn)換為字符串類型輸出。據(jù)轉(zhuǎn)換為字符串類型輸出。PrintWriter流與其它的過濾流的不同在于可以基于字節(jié)流與其它的過濾流的不同在于可以基于字節(jié)流和字符流兩種類型的流來創(chuàng)建。如可以通過下面兩種流和字符流兩種類型的流來創(chuàng)建。如可以通過下面兩種方式為文件方式為文件text.txt創(chuàng)建創(chuàng)建PrintWriter對(duì)象:對(duì)象:PrintWriter pw=new PrintWriter(new FileWrite
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 山東省泰安市肥城市2025年四年級(jí)數(shù)學(xué)第二學(xué)期期末教學(xué)質(zhì)量檢測(cè)試題含解析
- 廣東省廣州市天河區(qū)2024-2025學(xué)年數(shù)學(xué)四下期末達(dá)標(biāo)測(cè)試試題含解析
- 日喀則地區(qū)2024-2025學(xué)年四年級(jí)數(shù)學(xué)第二學(xué)期期末統(tǒng)考試題含解析
- 2024-2025學(xué)年河南省許昌市數(shù)學(xué)三下期末檢測(cè)模擬試題含解析
- 2025屆定西地區(qū)通渭縣五下數(shù)學(xué)期末綜合測(cè)試模擬試題含答案
- 2024-2025學(xué)年溫州市泰順縣四年級(jí)數(shù)學(xué)第二學(xué)期期末達(dá)標(biāo)檢測(cè)試題含解析
- 課題開題報(bào)告:初中學(xué)生跨學(xué)科實(shí)踐能力測(cè)評(píng)與培養(yǎng)路徑研究
- 課題開題報(bào)告:產(chǎn)學(xué)研用協(xié)同發(fā)展研究
- 床上用品制造企業(yè)ESG實(shí)踐與創(chuàng)新戰(zhàn)略研究報(bào)告
- 定制家具運(yùn)營(yíng)管理協(xié)議
- Unit5 What day is it today?(教學(xué)設(shè)計(jì))-2023-2024學(xué)年教科版(廣州)英語四年級(jí)下冊(cè)
- 《網(wǎng)絡(luò)信息安全教學(xué)》課件
- 《住院患者身體約束的護(hù)理》團(tuán)體標(biāo)準(zhǔn)解讀課件
- 2024年黑龍江建筑職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)適應(yīng)性測(cè)試題庫(kù)全面
- MOOC 跨文化交際通識(shí)通論-揚(yáng)州大學(xué) 中國(guó)大學(xué)慕課答案
- 10000中國(guó)普通人名大全
- 教師聽課評(píng)分表
- 項(xiàng)目章程模板范文
- 泰山產(chǎn)業(yè)領(lǐng)軍人才工程系統(tǒng)
- 輪扣架支模體系材料量計(jì)算
- 主題班會(huì)教案《讀書好讀好書好讀書》班會(huì)方案
評(píng)論
0/150
提交評(píng)論