




已閱讀5頁,還剩30頁未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第10章 I/O系統(tǒng),教學(xué)提示:從本章開始 ,將介紹Java中較為高級的內(nèi)容 。本章介紹Java的I/O(輸入/輸出)系統(tǒng),主要包括文件的基本操作 , Java 中流的概念及其應(yīng)用,以及隨機(jī)訪問文件。學(xué)習(xí)完本章內(nèi)容后,讀者對Java的I/O系統(tǒng)將有一個整體上的認(rèn)識,并有能力實(shí)現(xiàn)一般的輸入/輸出應(yīng)用。,教學(xué)目標(biāo):熟悉對文件及目錄的基本操作,熟悉Java I/O系統(tǒng)中各個類的作用及它們之間的關(guān)系 ,掌握隨機(jī)訪問文件的方法 。通過上機(jī)實(shí)踐,掌握上述內(nèi)容的綜合應(yīng)用。,10.1 文件的基本操作,對于任何程序設(shè)計語言的I/O系統(tǒng)來說,在對文件進(jìn)行讀寫數(shù)據(jù)操作(不管以何種方式進(jìn)行)之前,如何找到或定位正確的文件 ( 或目錄),如何獲取文件(或目錄)的屬性信息(如是否只讀、修改時間 、文件大小等),如何創(chuàng)建和刪除文件 (或目錄 ) ,是首先必須解決的基礎(chǔ)性問題。對文件(及目錄) 的這些基本操作,是整個 I/O 系統(tǒng)的基石。本節(jié)就先介紹Java 提供的用以協(xié)助處理文件 ( 及目錄 ) 相關(guān)事務(wù)的類File。,10.1.1 獲取文件名清單,10.1.2 獲取文件屬性信息,10.1.3 建立和刪除文件,10.1.1 獲取文件名清單,類File的名字很容易讓人產(chǎn)生誤解 ,以為 File 對象代表的就是文件,事實(shí)上并不只是如此 。File對象不僅可以與文件建立關(guān)聯(lián) ,而且可以與目錄建立關(guān)聯(lián),還可以與一組文件或目錄建立關(guān)聯(lián),甚至可以及一組文件及目錄的混合體建立關(guān)聯(lián) 。如果 File對象與一組文件或目錄甚至這兩者的混合體相關(guān)聯(lián),可以使用該對象的list()方法獲取它們的名稱列表。list()方法返回一個 String 數(shù)組,每個數(shù)組元素為一個文件或目錄的名稱。,返回,10.1.2 獲取文件屬性信息,File對象擁有很多獲取相關(guān)聯(lián)文件的屬性信息的方法,它們的詳細(xì)介紹見表10.1。,返回,返回,10.1.3 建立和刪除文件,File對象中關(guān)于建立和刪除文件(或目錄)的方法見表10.2。,返回,表10.2 File對象建立和刪除文件的方法,返回,10.2 流 概 述,所謂流,是指任何可以產(chǎn)生數(shù)據(jù)的數(shù)據(jù)源,或任何可以接收數(shù)據(jù)的接收端,在數(shù)據(jù)源或接收端與使用流的程序之間的是一個數(shù)據(jù)序列,其中的數(shù)據(jù)以字節(jié)或字符為單位順序排列 。 在往流中寫入數(shù)據(jù)的一端觀察,這個流即為輸出流;相反,在從流中讀出數(shù)據(jù)的一端觀察,這個流即為輸入流。流是有方向性的,不能往一個輸入流中寫數(shù)據(jù),也不能從一個輸出流中讀數(shù)據(jù)。,10.3 字 節(jié) 流,InputStream/OutputStream繼承體系中各子類的說明見表10.3和表10.4。,FilterInputStream和FilterOutputStream各子類的說明見表10.5和表10.6。,10.3.1 ByteArrayInputStream,10.3.2 ByteArrayOutputStream,10.3.3 FileInputStream,10.3.5 FilterInputStream,10.3.4 FileOutputStream,10.3.7 SequenceInputStream,10.3.6 FilterOutputStream,表10.3 InputStream的子類,返回,表10.4 OutputStream的子類,返回,表10.5 FilterInputStream的子類,返回,表10.6 FilterOutputStream的子類,返回,10.3.1 ByteArrayInputStream,ByteArrayInputStream對象中有一個字節(jié)數(shù)組 (byte) 類型的屬性,作為內(nèi)部緩沖區(qū)。類ByteArrayInputStream有兩個構(gòu)造方法,一個構(gòu)造方法以一個字節(jié)數(shù)組作為參數(shù),其數(shù)據(jù)被完全復(fù)制給內(nèi)部緩沖區(qū);另一個構(gòu)造方法的參數(shù)包括一個字節(jié)數(shù)組 、 一個整型偏移量和一個整型長度,與前一個構(gòu)造方法不同的是,此構(gòu)造方法生成的內(nèi)部緩沖區(qū)將以指定偏移量位置作為起始位置 , 并且能讀取的最大數(shù)據(jù)長度為指定長度值。這個字節(jié)數(shù)組就是該輸入流的數(shù)據(jù)源 。內(nèi)部緩沖區(qū)保持一個標(biāo)記,指向當(dāng)前字節(jié) 。read()方法讀取該標(biāo)記所指字節(jié)的數(shù)據(jù) ,并將該標(biāo)記向后移一個字節(jié) ,使下一個字節(jié)成為當(dāng)前字節(jié);通過mark()方法可以在當(dāng)前字節(jié)處做一個記號 ,通過 reset()方法可以將該記號所指的字節(jié)恢復(fù)為當(dāng)前字節(jié),緩沖區(qū)標(biāo)記重新指向該字節(jié) ;通過 skip() 方法可以使緩沖區(qū)標(biāo)記向后跳躍。,返回,10.3.2 ByteArrayOutputStream,與ByteArrayInputStream對應(yīng),ByteArrayOutputStream對象中同樣有一個字節(jié)數(shù)組類型的屬性 ,作為內(nèi)部緩沖區(qū) ,同時也是該輸出流的接收端。類ByteArrayOutputStream有兩個構(gòu)造方法,一個構(gòu)造方法沒有參數(shù) ,生成的內(nèi)部緩沖區(qū)的初始大小為32個字節(jié) , 另一個構(gòu)造方法有一個整型參數(shù) ,生成的內(nèi)部緩沖區(qū)的初始大小即為該整型參數(shù) ,內(nèi)部緩沖區(qū)大小將隨著數(shù)據(jù)的寫入自動更改 。 ByteArrayOutputStream 對象通過write()方法往內(nèi)部緩沖區(qū)中寫入數(shù)據(jù) ;通過toByteArray() 和toString() 可以獲取內(nèi)部緩沖區(qū)的所有數(shù)據(jù) ;通過 reset( ) 方法可以清空內(nèi)部緩沖區(qū)數(shù)據(jù),使數(shù)據(jù)的寫入重新開始;通過 writeTo( ) 方法可以將內(nèi)部緩沖區(qū)的所有數(shù)據(jù)寫入另一個輸出流中。,返回,10.3.3 FileInputStream,FileInputStream對象的數(shù)據(jù)源為文件,其構(gòu)造方法有3個,一個以文件名為參數(shù),一個以File對象為參數(shù),它們的作用是顯然的,只有一點(diǎn)值得注意,若關(guān)聯(lián)的是目錄或指定文件不存在 ,則會產(chǎn)生異常 。比較特別的是以FileDescriptor對象為參數(shù)的構(gòu)造方法。FileDescriptor 也是 java.io包中的類,用于關(guān)聯(lián)已打開的文件,或已打開的網(wǎng)絡(luò)鏈接,或其他 I/O連接,在機(jī)器底層發(fā)揮作用,可以強(qiáng)制系統(tǒng)緩沖區(qū)與底層設(shè)備 (文件、網(wǎng)絡(luò)連接和其他I/O連接都是底層設(shè)備)保持同步,從而為輸入流或輸出流提供一個與底層設(shè)備同步的系統(tǒng)緩沖區(qū)。這個類并不常用。,返回,10.3.4 FileOutputStream,FileOutputStream對象同F(xiàn)ileInputStream一樣與文件關(guān)聯(lián) ,該文件就是其接收端。寫入FileOutputStream對象中的數(shù)據(jù)將最終寫入其關(guān)聯(lián)文件 。類FileOutputStream的構(gòu)造方法有4個,其中 3個分別以關(guān)聯(lián)文件名 、File 對象和FileDescriptor對象為參數(shù),與FileInputStream 相應(yīng)的3 個構(gòu)造方法中的參數(shù)作用相同,另一個構(gòu)造方法以關(guān)聯(lián)文件名和一個布爾值為參數(shù) ,該布爾值若為true ,則往 FileOutputStream 對象中寫入的數(shù)據(jù)將從關(guān)聯(lián)文件的末尾處開始寫入,否則將從關(guān)聯(lián)文件的開頭處開始寫入 ,這將覆蓋原有數(shù)據(jù),參數(shù)只有關(guān)聯(lián)文件名的構(gòu)造方法,相當(dāng)于此布爾值為 false 。關(guān)聯(lián)文件是否有效,不存在時是否可能被創(chuàng)建,視不同操作系統(tǒng)平臺不同可能不同。在某些操作系統(tǒng)平臺下,同時只允許一個 FileOutputStream 對象關(guān)聯(lián)一個以寫方式打開的文件。FileOutputStream 對象的方法比較簡單,主要通過 write()方法往系統(tǒng)緩沖區(qū)中寫入數(shù)據(jù),通過 flush() 方法把系統(tǒng)緩沖區(qū)的數(shù)據(jù)刷新提交到關(guān)聯(lián)文件中。,返回,10.3.5 FilterInputStream,類FilterInputStream的構(gòu)造方法是受保護(hù)的(protected),無法直接創(chuàng)建FilterInputStream對象,本章將直接介紹其子類。由于類LineNumberInputStream已經(jīng)不建議使用,類PashbackInputStream也極少使用,本書將不作介紹。,返回,10.3.6 FilterOutputStream,類FilterOutputStream的構(gòu)造方法也是受保護(hù)的(protected),同樣無法直接創(chuàng)建其對象,本章也將直接介紹其子類。,返回,10.3.7 SequenceInputStream,表10.15 SequenceInputStream對象的方法,返回,10.4 字 符 流,Reader/Writer繼承體系中各類與InputStream/OutputStream繼承體系中相應(yīng)類的作用基本相同,區(qū)別在于前者基于16位的Unicode編碼字符進(jìn)行讀取和寫入操作,這兩個繼承體系之間的對應(yīng)關(guān)系見表10.16。,10.4.2 CharArrayWriter,10.4.1 CharArrayReader,10.4.3 InputStreamReader,10.4.4 OutputStreamWriter,10.4.5 FileReader,10.4.7 StringReader,10.4.6 FileWriter,10.4.8 StringWriter,10.4.9 BufferedReader,10.4.10 LineNumberReader,10.4.12 PrintWriter,10.4.11 BufferedWriter,表10.16 InputStream/OutputStream繼承體系與Reader/Writer繼承體系的對應(yīng)關(guān)系,返回,10.4.1 CharArrayReader,CharArrayReader 對象中有一個字符數(shù)組(char)類型的屬性,作為內(nèi)部緩沖區(qū)。類CharArrayReader有兩個構(gòu)造方法,其中一個構(gòu)造方法以一個字符數(shù)組作為參數(shù),另一個構(gòu)造方法的參數(shù)包括一個字符數(shù)組、一個整型偏移量和一個整型長度,意義與ByteArrayInputStream對象相同。,返回,10.4.2 CharArrayWriter,與ByteArrayOutputStream對應(yīng),CharArrayWriter對象中有一個字符數(shù)組類型的屬性作為內(nèi)部緩沖區(qū),同時也是該字符輸出流的接收端。類CharArrayWriter有兩個構(gòu)造方法,其中一個構(gòu)造方法沒有參數(shù),生成的內(nèi)部緩沖區(qū)的初始大小為默認(rèn)值,另一個構(gòu)造方法有一個整型參數(shù),生成的內(nèi)部緩沖區(qū)的初始大小即為該整型參數(shù),內(nèi)部緩沖區(qū)大小將隨著數(shù)據(jù)的寫入自動更改。,返回,10.4.3 InputStreamReader,類InputStreamReader是所謂橋類之一,用于將字節(jié)輸入流轉(zhuǎn)換成字符輸入流,其自身是字符輸入流,其數(shù)據(jù)源是字節(jié)輸入流。InputStreamReader對象往往被作為其他字符輸入流的數(shù)據(jù)源使用。,返回,10.4.4 OutputStreamWriter,類OutputStreamWriter是所謂橋類中的另一個,用于將字符輸出流轉(zhuǎn)換成字節(jié)輸出流,其自身是字符輸出流,其接收端是字節(jié)輸出流。OutputStreamWriter對象往往被作為其他字符輸出流的接收端使用。該類有4個構(gòu)造方法,一個構(gòu)造方法以一個字節(jié)輸出流對象為參數(shù),為要轉(zhuǎn)換成的字節(jié)輸出流,采用默認(rèn)的字符編碼格式轉(zhuǎn)換字符輸出流中的字符數(shù)據(jù)為字節(jié)數(shù)據(jù);一個構(gòu)造方法以一個字節(jié)輸出流對象和一個字符串為參數(shù),這個字符串為字符編碼名稱,表示使用何種字符編碼格式轉(zhuǎn)換字符輸出流中的字符數(shù)據(jù);一個構(gòu)造方法以一個字節(jié)輸出流對象和一個Charset對象為參數(shù)(JDK 1.4中新加入的構(gòu)造方法),后者指定采用何種字符集轉(zhuǎn)換字符輸出流中的字符數(shù)據(jù),請參閱Java(JDK 1.4)API文檔;另一個構(gòu)造方法以一個字節(jié)輸出流對象和一個CharsetEncoder對象為參數(shù)(JDK 1.4中新加入的構(gòu)造方法),后者指定采用何種字符集編碼器轉(zhuǎn)換字符輸出流中的字符數(shù)據(jù),CharsetEncoder為字符集編碼器類,代表將字符序列轉(zhuǎn)換成字節(jié)序列的引擎,請參閱Java(JDK 1.4)API文檔。,返回,10.4.5 FileReader,FileReader是InputStreamReader的子類,與FileInputStream對應(yīng),用于讀取關(guān)聯(lián)文件中的數(shù)據(jù)。其構(gòu)造方法有3個,一個以文件名為參數(shù),一個以File對象為參數(shù),一個以FileDescriptor對象為參數(shù)(參見10.3.3小節(jié)),這些構(gòu)造方法都假設(shè)默認(rèn)的編碼格式和默認(rèn)的字節(jié)緩沖區(qū)是合法的。FileReader的方法都直接繼承自其父類InputStreamReader,甚至沒有進(jìn)行任何重載,,返回,10.4.6 FileWriter,FileWriter是OutputStreamWriter 的子類,與 FileOutputStream 對應(yīng),用于往關(guān)聯(lián)文件中寫入數(shù)據(jù)。其構(gòu)造方法有5個,一個以文件名為參數(shù),一個以File對象為參數(shù),一個以FileDescriptor對象為參數(shù)(參見10.3.3小節(jié)),另兩個構(gòu)造方法分別以關(guān)聯(lián)文件名和一個布爾值,以及File對象和一個布爾值(JDK 1.4中新加入的構(gòu)造方法)為參數(shù),該布爾值若為true,則往FileWriter對象中寫入的數(shù)據(jù)將從關(guān)聯(lián)文件的末尾處開始寫入,否則將從關(guān)聯(lián)文件的開頭處開始寫入,這將覆蓋原有數(shù)據(jù) ,參數(shù)只有關(guān)聯(lián)文件名或File對象的構(gòu)造方法,相當(dāng)于此布爾值為false。這些構(gòu)造方法都假設(shè)默認(rèn)的編碼格式和默認(rèn)的字節(jié)緩沖區(qū)是合法的。FileWriter的方法都直接繼承自其父類 OutputStreamWriter,同樣沒有進(jìn)行任何重載,在此不一一列出,,返回,10.4.7 StringReader,StringReader對象與一個字符串關(guān)聯(lián),其構(gòu)造方法以一個字符串為參數(shù),作為數(shù)據(jù)源,其方法與 CharArrayReader 完全相同,ready() 方法同樣始終返回true,因?yàn)樽址斎肓魍瑯邮冀K為read()方法作好準(zhǔn)備。,返回,10.4.8 StringWriter,StringWriter對象中有個StringBuffer對象作為內(nèi)部緩沖區(qū),同時也是該字符輸出流的接收端。類StringWriter有兩個構(gòu)造方法,一個構(gòu)造方法沒有參數(shù),生成的緩沖區(qū)長度為默認(rèn)值,另一個構(gòu)造方法有一個整型參數(shù),生成的內(nèi)部緩沖區(qū)的初始大小即為該整型參數(shù),內(nèi)部緩沖區(qū)大小將隨著數(shù)據(jù)的寫入自動更改。,返回,10.4.9 BufferedReader,BufferedReader提供具有緩沖能力的字符輸入流,其工作原理與BufferedInputStream相同,同樣擁有一個內(nèi)部緩沖區(qū),但以一個字符輸入流為數(shù)據(jù)源。類BufferedReader有兩個構(gòu)造方法 ,其中一個以一個字符輸入流對象為參數(shù),作為數(shù)據(jù)源輸入流 ,內(nèi)部緩沖區(qū)大小為默認(rèn)值;另一個以一個字符輸入流對象和一個整數(shù)為參數(shù),該整數(shù)用于指定內(nèi)部緩沖區(qū)的大小。,返回,10.4.10 LineNumberReader,LineNumberReader是BufferedReader的子類,同樣具有緩沖功能,擁有其一切特征,并提供一種按行讀取數(shù)據(jù)的機(jī)制,其中一行結(jié)束的標(biāo)志為換行符(n)或回車符(r)或回車符后緊跟一個換行符(回車換行符)。類LineNumberReader有兩個構(gòu)造方法,一個以一個字符輸入流對象為參數(shù),作為數(shù)據(jù)源輸入流,內(nèi)部緩沖區(qū)大小為默認(rèn)值;另一個以一個字符輸入流對象和一個整數(shù)為參數(shù),該整數(shù)用于指定內(nèi)部緩沖區(qū)的大小。LineNumberReader在BufferedReader的基礎(chǔ)上增加了兩個方法,setLineNumber()用于為當(dāng)前行編號,其后續(xù)行的編號將在此編號的基礎(chǔ)上遞增,getLineNumber()用于獲取當(dāng)前行的編號,默認(rèn)情況下行編號從0開始。,返回,10.4.11 BufferedWriter,BufferedWriter提供具有緩沖能力的字符輸出流,其工作原理與BufferedOutputStream相
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 一方城堡酒店設(shè)計
- 租賃水電免責(zé)協(xié)議書
- 股票質(zhì)押轉(zhuǎn)讓協(xié)議書
- 股權(quán)反向收購協(xié)議書
- 企業(yè)管理方案設(shè)計
- 緊急建材供應(yīng)合同
- 跟租房子實(shí)地檢查協(xié)議
- 面罩機(jī)采購合同
- 寵物護(hù)理與維護(hù)合同
- 服務(wù)行業(yè)人力資源部年度工作總結(jié)與計劃
- 《民用航空行業(yè)標(biāo)準(zhǔn)體系》
- 湖北省高中六校2025屆高三第三次模擬考試數(shù)學(xué)試卷含解析
- 非遺項(xiàng)目數(shù)字化保存案例研究
- 《計算機(jī)網(wǎng)絡(luò)技術(shù)》課件-2.2 OSI參考模型
- Photoshop平面設(shè)計與制作知到智慧樹章節(jié)測試課后答案2024年秋黑龍江農(nóng)業(yè)工程職業(yè)學(xué)院(松北校區(qū))
- 人工智能基礎(chǔ)知到智慧樹章節(jié)測試課后答案2024年秋北京科技大學(xué)
- 眼科(025)(正高級)高級衛(wèi)生專業(yè)技術(shù)資格考試試題及解答參考
- 燃?xì)夤究冃Э己嗽u價表
- 云南省昆明市(2024年-2025年小學(xué)六年級語文)部編版小升初真題(下學(xué)期)試卷及答案
- 財產(chǎn)保險考試:非車險核??荚囌骖}及答案
- 農(nóng)產(chǎn)品電子商務(wù)-形考任務(wù)三-國開(ZJ)-參考資料
評論
0/150
提交評論