




已閱讀5頁(yè),還剩30頁(yè)未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第10章 I/O系統(tǒng),教學(xué)提示:從本章開(kāi)始 ,將介紹Java中較為高級(jí)的內(nèi)容 。本章介紹Java的I/O(輸入/輸出)系統(tǒng),主要包括文件的基本操作 , Java 中流的概念及其應(yīng)用,以及隨機(jī)訪問(wèn)文件。學(xué)習(xí)完本章內(nèi)容后,讀者對(duì)Java的I/O系統(tǒng)將有一個(gè)整體上的認(rèn)識(shí),并有能力實(shí)現(xiàn)一般的輸入/輸出應(yīng)用。,教學(xué)目標(biāo):熟悉對(duì)文件及目錄的基本操作,熟悉Java I/O系統(tǒng)中各個(gè)類的作用及它們之間的關(guān)系 ,掌握隨機(jī)訪問(wèn)文件的方法 。通過(guò)上機(jī)實(shí)踐,掌握上述內(nèi)容的綜合應(yīng)用。,10.1 文件的基本操作,對(duì)于任何程序設(shè)計(jì)語(yǔ)言的I/O系統(tǒng)來(lái)說(shuō),在對(duì)文件進(jìn)行讀寫數(shù)據(jù)操作(不管以何種方式進(jìn)行)之前,如何找到或定位正確的文件 ( 或目錄),如何獲取文件(或目錄)的屬性信息(如是否只讀、修改時(shí)間 、文件大小等),如何創(chuàng)建和刪除文件 (或目錄 ) ,是首先必須解決的基礎(chǔ)性問(wèn)題。對(duì)文件(及目錄) 的這些基本操作,是整個(gè) 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 對(duì)象代表的就是文件,事實(shí)上并不只是如此 。File對(duì)象不僅可以與文件建立關(guān)聯(lián) ,而且可以與目錄建立關(guān)聯(lián),還可以與一組文件或目錄建立關(guān)聯(lián),甚至可以及一組文件及目錄的混合體建立關(guān)聯(lián) 。如果 File對(duì)象與一組文件或目錄甚至這兩者的混合體相關(guān)聯(lián),可以使用該對(duì)象的list()方法獲取它們的名稱列表。list()方法返回一個(gè) String 數(shù)組,每個(gè)數(shù)組元素為一個(gè)文件或目錄的名稱。,返回,10.1.2 獲取文件屬性信息,File對(duì)象擁有很多獲取相關(guān)聯(lián)文件的屬性信息的方法,它們的詳細(xì)介紹見(jiàn)表10.1。,返回,返回,10.1.3 建立和刪除文件,File對(duì)象中關(guān)于建立和刪除文件(或目錄)的方法見(jiàn)表10.2。,返回,表10.2 File對(duì)象建立和刪除文件的方法,返回,10.2 流 概 述,所謂流,是指任何可以產(chǎn)生數(shù)據(jù)的數(shù)據(jù)源,或任何可以接收數(shù)據(jù)的接收端,在數(shù)據(jù)源或接收端與使用流的程序之間的是一個(gè)數(shù)據(jù)序列,其中的數(shù)據(jù)以字節(jié)或字符為單位順序排列 。 在往流中寫入數(shù)據(jù)的一端觀察,這個(gè)流即為輸出流;相反,在從流中讀出數(shù)據(jù)的一端觀察,這個(gè)流即為輸入流。流是有方向性的,不能往一個(gè)輸入流中寫數(shù)據(jù),也不能從一個(gè)輸出流中讀數(shù)據(jù)。,10.3 字 節(jié) 流,InputStream/OutputStream繼承體系中各子類的說(shuō)明見(jiàn)表10.3和表10.4。,FilterInputStream和FilterOutputStream各子類的說(shuō)明見(jiàn)表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對(duì)象中有一個(gè)字節(jié)數(shù)組 (byte) 類型的屬性,作為內(nèi)部緩沖區(qū)。類ByteArrayInputStream有兩個(gè)構(gòu)造方法,一個(gè)構(gòu)造方法以一個(gè)字節(jié)數(shù)組作為參數(shù),其數(shù)據(jù)被完全復(fù)制給內(nèi)部緩沖區(qū);另一個(gè)構(gòu)造方法的參數(shù)包括一個(gè)字節(jié)數(shù)組 、 一個(gè)整型偏移量和一個(gè)整型長(zhǎng)度,與前一個(gè)構(gòu)造方法不同的是,此構(gòu)造方法生成的內(nèi)部緩沖區(qū)將以指定偏移量位置作為起始位置 , 并且能讀取的最大數(shù)據(jù)長(zhǎng)度為指定長(zhǎng)度值。這個(gè)字節(jié)數(shù)組就是該輸入流的數(shù)據(jù)源 。內(nèi)部緩沖區(qū)保持一個(gè)標(biāo)記,指向當(dāng)前字節(jié) 。read()方法讀取該標(biāo)記所指字節(jié)的數(shù)據(jù) ,并將該標(biāo)記向后移一個(gè)字節(jié) ,使下一個(gè)字節(jié)成為當(dāng)前字節(jié);通過(guò)mark()方法可以在當(dāng)前字節(jié)處做一個(gè)記號(hào) ,通過(guò) reset()方法可以將該記號(hào)所指的字節(jié)恢復(fù)為當(dāng)前字節(jié),緩沖區(qū)標(biāo)記重新指向該字節(jié) ;通過(guò) skip() 方法可以使緩沖區(qū)標(biāo)記向后跳躍。,返回,10.3.2 ByteArrayOutputStream,與ByteArrayInputStream對(duì)應(yīng),ByteArrayOutputStream對(duì)象中同樣有一個(gè)字節(jié)數(shù)組類型的屬性 ,作為內(nèi)部緩沖區(qū) ,同時(shí)也是該輸出流的接收端。類ByteArrayOutputStream有兩個(gè)構(gòu)造方法,一個(gè)構(gòu)造方法沒(méi)有參數(shù) ,生成的內(nèi)部緩沖區(qū)的初始大小為32個(gè)字節(jié) , 另一個(gè)構(gòu)造方法有一個(gè)整型參數(shù) ,生成的內(nèi)部緩沖區(qū)的初始大小即為該整型參數(shù) ,內(nèi)部緩沖區(qū)大小將隨著數(shù)據(jù)的寫入自動(dòng)更改 。 ByteArrayOutputStream 對(duì)象通過(guò)write()方法往內(nèi)部緩沖區(qū)中寫入數(shù)據(jù) ;通過(guò)toByteArray() 和toString() 可以獲取內(nèi)部緩沖區(qū)的所有數(shù)據(jù) ;通過(guò) reset( ) 方法可以清空內(nèi)部緩沖區(qū)數(shù)據(jù),使數(shù)據(jù)的寫入重新開(kāi)始;通過(guò) writeTo( ) 方法可以將內(nèi)部緩沖區(qū)的所有數(shù)據(jù)寫入另一個(gè)輸出流中。,返回,10.3.3 FileInputStream,FileInputStream對(duì)象的數(shù)據(jù)源為文件,其構(gòu)造方法有3個(gè),一個(gè)以文件名為參數(shù),一個(gè)以File對(duì)象為參數(shù),它們的作用是顯然的,只有一點(diǎn)值得注意,若關(guān)聯(lián)的是目錄或指定文件不存在 ,則會(huì)產(chǎn)生異常 。比較特別的是以FileDescriptor對(duì)象為參數(shù)的構(gòu)造方法。FileDescriptor 也是 java.io包中的類,用于關(guān)聯(lián)已打開(kāi)的文件,或已打開(kāi)的網(wǎng)絡(luò)鏈接,或其他 I/O連接,在機(jī)器底層發(fā)揮作用,可以強(qiáng)制系統(tǒng)緩沖區(qū)與底層設(shè)備 (文件、網(wǎng)絡(luò)連接和其他I/O連接都是底層設(shè)備)保持同步,從而為輸入流或輸出流提供一個(gè)與底層設(shè)備同步的系統(tǒng)緩沖區(qū)。這個(gè)類并不常用。,返回,10.3.4 FileOutputStream,FileOutputStream對(duì)象同F(xiàn)ileInputStream一樣與文件關(guān)聯(lián) ,該文件就是其接收端。寫入FileOutputStream對(duì)象中的數(shù)據(jù)將最終寫入其關(guān)聯(lián)文件 。類FileOutputStream的構(gòu)造方法有4個(gè),其中 3個(gè)分別以關(guān)聯(lián)文件名 、File 對(duì)象和FileDescriptor對(duì)象為參數(shù),與FileInputStream 相應(yīng)的3 個(gè)構(gòu)造方法中的參數(shù)作用相同,另一個(gè)構(gòu)造方法以關(guān)聯(lián)文件名和一個(gè)布爾值為參數(shù) ,該布爾值若為true ,則往 FileOutputStream 對(duì)象中寫入的數(shù)據(jù)將從關(guān)聯(lián)文件的末尾處開(kāi)始寫入,否則將從關(guān)聯(lián)文件的開(kāi)頭處開(kāi)始寫入 ,這將覆蓋原有數(shù)據(jù),參數(shù)只有關(guān)聯(lián)文件名的構(gòu)造方法,相當(dāng)于此布爾值為 false 。關(guān)聯(lián)文件是否有效,不存在時(shí)是否可能被創(chuàng)建,視不同操作系統(tǒng)平臺(tái)不同可能不同。在某些操作系統(tǒng)平臺(tái)下,同時(shí)只允許一個(gè) FileOutputStream 對(duì)象關(guān)聯(lián)一個(gè)以寫方式打開(kāi)的文件。FileOutputStream 對(duì)象的方法比較簡(jiǎn)單,主要通過(guò) write()方法往系統(tǒng)緩沖區(qū)中寫入數(shù)據(jù),通過(guò) flush() 方法把系統(tǒng)緩沖區(qū)的數(shù)據(jù)刷新提交到關(guān)聯(lián)文件中。,返回,10.3.5 FilterInputStream,類FilterInputStream的構(gòu)造方法是受保護(hù)的(protected),無(wú)法直接創(chuàng)建FilterInputStream對(duì)象,本章將直接介紹其子類。由于類LineNumberInputStream已經(jīng)不建議使用,類PashbackInputStream也極少使用,本書(shū)將不作介紹。,返回,10.3.6 FilterOutputStream,類FilterOutputStream的構(gòu)造方法也是受保護(hù)的(protected),同樣無(wú)法直接創(chuàng)建其對(duì)象,本章也將直接介紹其子類。,返回,10.3.7 SequenceInputStream,表10.15 SequenceInputStream對(duì)象的方法,返回,10.4 字 符 流,Reader/Writer繼承體系中各類與InputStream/OutputStream繼承體系中相應(yīng)類的作用基本相同,區(qū)別在于前者基于16位的Unicode編碼字符進(jìn)行讀取和寫入操作,這兩個(gè)繼承體系之間的對(duì)應(yīng)關(guān)系見(jià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繼承體系的對(duì)應(yīng)關(guān)系,返回,10.4.1 CharArrayReader,CharArrayReader 對(duì)象中有一個(gè)字符數(shù)組(char)類型的屬性,作為內(nèi)部緩沖區(qū)。類CharArrayReader有兩個(gè)構(gòu)造方法,其中一個(gè)構(gòu)造方法以一個(gè)字符數(shù)組作為參數(shù),另一個(gè)構(gòu)造方法的參數(shù)包括一個(gè)字符數(shù)組、一個(gè)整型偏移量和一個(gè)整型長(zhǎng)度,意義與ByteArrayInputStream對(duì)象相同。,返回,10.4.2 CharArrayWriter,與ByteArrayOutputStream對(duì)應(yīng),CharArrayWriter對(duì)象中有一個(gè)字符數(shù)組類型的屬性作為內(nèi)部緩沖區(qū),同時(shí)也是該字符輸出流的接收端。類CharArrayWriter有兩個(gè)構(gòu)造方法,其中一個(gè)構(gòu)造方法沒(méi)有參數(shù),生成的內(nèi)部緩沖區(qū)的初始大小為默認(rèn)值,另一個(gè)構(gòu)造方法有一個(gè)整型參數(shù),生成的內(nèi)部緩沖區(qū)的初始大小即為該整型參數(shù),內(nèi)部緩沖區(qū)大小將隨著數(shù)據(jù)的寫入自動(dòng)更改。,返回,10.4.3 InputStreamReader,類InputStreamReader是所謂橋類之一,用于將字節(jié)輸入流轉(zhuǎn)換成字符輸入流,其自身是字符輸入流,其數(shù)據(jù)源是字節(jié)輸入流。InputStreamReader對(duì)象往往被作為其他字符輸入流的數(shù)據(jù)源使用。,返回,10.4.4 OutputStreamWriter,類OutputStreamWriter是所謂橋類中的另一個(gè),用于將字符輸出流轉(zhuǎn)換成字節(jié)輸出流,其自身是字符輸出流,其接收端是字節(jié)輸出流。OutputStreamWriter對(duì)象往往被作為其他字符輸出流的接收端使用。該類有4個(gè)構(gòu)造方法,一個(gè)構(gòu)造方法以一個(gè)字節(jié)輸出流對(duì)象為參數(shù),為要轉(zhuǎn)換成的字節(jié)輸出流,采用默認(rèn)的字符編碼格式轉(zhuǎn)換字符輸出流中的字符數(shù)據(jù)為字節(jié)數(shù)據(jù);一個(gè)構(gòu)造方法以一個(gè)字節(jié)輸出流對(duì)象和一個(gè)字符串為參數(shù),這個(gè)字符串為字符編碼名稱,表示使用何種字符編碼格式轉(zhuǎn)換字符輸出流中的字符數(shù)據(jù);一個(gè)構(gòu)造方法以一個(gè)字節(jié)輸出流對(duì)象和一個(gè)Charset對(duì)象為參數(shù)(JDK 1.4中新加入的構(gòu)造方法),后者指定采用何種字符集轉(zhuǎn)換字符輸出流中的字符數(shù)據(jù),請(qǐng)參閱Java(JDK 1.4)API文檔;另一個(gè)構(gòu)造方法以一個(gè)字節(jié)輸出流對(duì)象和一個(gè)CharsetEncoder對(duì)象為參數(shù)(JDK 1.4中新加入的構(gòu)造方法),后者指定采用何種字符集編碼器轉(zhuǎn)換字符輸出流中的字符數(shù)據(jù),CharsetEncoder為字符集編碼器類,代表將字符序列轉(zhuǎn)換成字節(jié)序列的引擎,請(qǐng)參閱Java(JDK 1.4)API文檔。,返回,10.4.5 FileReader,FileReader是InputStreamReader的子類,與FileInputStream對(duì)應(yīng),用于讀取關(guān)聯(lián)文件中的數(shù)據(jù)。其構(gòu)造方法有3個(gè),一個(gè)以文件名為參數(shù),一個(gè)以File對(duì)象為參數(shù),一個(gè)以FileDescriptor對(duì)象為參數(shù)(參見(jiàn)10.3.3小節(jié)),這些構(gòu)造方法都假設(shè)默認(rèn)的編碼格式和默認(rèn)的字節(jié)緩沖區(qū)是合法的。FileReader的方法都直接繼承自其父類InputStreamReader,甚至沒(méi)有進(jìn)行任何重載,,返回,10.4.6 FileWriter,FileWriter是OutputStreamWriter 的子類,與 FileOutputStream 對(duì)應(yīng),用于往關(guān)聯(lián)文件中寫入數(shù)據(jù)。其構(gòu)造方法有5個(gè),一個(gè)以文件名為參數(shù),一個(gè)以File對(duì)象為參數(shù),一個(gè)以FileDescriptor對(duì)象為參數(shù)(參見(jiàn)10.3.3小節(jié)),另兩個(gè)構(gòu)造方法分別以關(guān)聯(lián)文件名和一個(gè)布爾值,以及File對(duì)象和一個(gè)布爾值(JDK 1.4中新加入的構(gòu)造方法)為參數(shù),該布爾值若為true,則往FileWriter對(duì)象中寫入的數(shù)據(jù)將從關(guān)聯(lián)文件的末尾處開(kāi)始寫入,否則將從關(guān)聯(lián)文件的開(kāi)頭處開(kāi)始寫入,這將覆蓋原有數(shù)據(jù) ,參數(shù)只有關(guān)聯(lián)文件名或File對(duì)象的構(gòu)造方法,相當(dāng)于此布爾值為false。這些構(gòu)造方法都假設(shè)默認(rèn)的編碼格式和默認(rèn)的字節(jié)緩沖區(qū)是合法的。FileWriter的方法都直接繼承自其父類 OutputStreamWriter,同樣沒(méi)有進(jìn)行任何重載,在此不一一列出,,返回,10.4.7 StringReader,StringReader對(duì)象與一個(gè)字符串關(guān)聯(lián),其構(gòu)造方法以一個(gè)字符串為參數(shù),作為數(shù)據(jù)源,其方法與 CharArrayReader 完全相同,ready() 方法同樣始終返回true,因?yàn)樽址斎肓魍瑯邮冀K為read()方法作好準(zhǔn)備。,返回,10.4.8 StringWriter,StringWriter對(duì)象中有個(gè)StringBuffer對(duì)象作為內(nèi)部緩沖區(qū),同時(shí)也是該字符輸出流的接收端。類StringWriter有兩個(gè)構(gòu)造方法,一個(gè)構(gòu)造方法沒(méi)有參數(shù),生成的緩沖區(qū)長(zhǎng)度為默認(rèn)值,另一個(gè)構(gòu)造方法有一個(gè)整型參數(shù),生成的內(nèi)部緩沖區(qū)的初始大小即為該整型參數(shù),內(nèi)部緩沖區(qū)大小將隨著數(shù)據(jù)的寫入自動(dòng)更改。,返回,10.4.9 BufferedReader,BufferedReader提供具有緩沖能力的字符輸入流,其工作原理與BufferedInputStream相同,同樣擁有一個(gè)內(nèi)部緩沖區(qū),但以一個(gè)字符輸入流為數(shù)據(jù)源。類BufferedReader有兩個(gè)構(gòu)造方法 ,其中一個(gè)以一個(gè)字符輸入流對(duì)象為參數(shù),作為數(shù)據(jù)源輸入流 ,內(nèi)部緩沖區(qū)大小為默認(rèn)值;另一個(gè)以一個(gè)字符輸入流對(duì)象和一個(gè)整數(shù)為參數(shù),該整數(shù)用于指定內(nèi)部緩沖區(qū)的大小。,返回,10.4.10 LineNumberReader,LineNumberReader是BufferedReader的子類,同樣具有緩沖功能,擁有其一切特征,并提供一種按行讀取數(shù)據(jù)的機(jī)制,其中一行結(jié)束的標(biāo)志為換行符(n)或回車符(r)或回車符后緊跟一個(gè)換行符(回車換行符)。類LineNumberReader有兩個(gè)構(gòu)造方法,一個(gè)以一個(gè)字符輸入流對(duì)象為參數(shù),作為數(shù)據(jù)源輸入流,內(nèi)部緩沖區(qū)大小為默認(rèn)值;另一個(gè)以一個(gè)字符輸入流對(duì)象和一個(gè)整數(shù)為參數(shù),該整數(shù)用于指定內(nèi)部緩沖區(qū)的大小。LineNumberReader在BufferedReader的基礎(chǔ)上增加了兩個(gè)方法,setLineNumber()用于為當(dāng)前行編號(hào),其后續(xù)行的編號(hào)將在此編號(hào)的基礎(chǔ)上遞增,getLineNumber()用于獲取當(dāng)前行的編號(hào),默認(rèn)情況下行編號(hào)從0開(kāi)始。,返回,10.4.11 BufferedWriter,BufferedWriter提供具有緩沖能力的字符輸出流,其工作原理與BufferedOutputStream相
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 建筑施工現(xiàn)場(chǎng)機(jī)械管理及安全措施
- 幼兒園室內(nèi)外安全隱患排查培訓(xùn)計(jì)劃
- 護(hù)理康復(fù)產(chǎn)品介紹
- 臨床護(hù)理案例分享
- 康復(fù)治療專業(yè)科學(xué)普及
- 11 坐井觀天 課件
- 納章小學(xué)2025 學(xué)生健康評(píng)估與干預(yù)計(jì)劃
- 2025春季小學(xué)三年級(jí)下冊(cè)語(yǔ)文項(xiàng)目式學(xué)習(xí)計(jì)劃
- 色彩原理基礎(chǔ)知識(shí)
- 2024屆濟(jì)寧市高中學(xué)段校十校聯(lián)考最后數(shù)學(xué)試題含解析
- 2022年甘肅省天水市中考生物真題含答案2
- 2024年湖北三新供電服務(wù)有限公司招聘筆試參考題庫(kù)含答案解析
- 徒手整形 培訓(xùn)課件
- 市場(chǎng)營(yíng)銷學(xué)電子教案
- 《內(nèi)蒙古乳制品出口貿(mào)易發(fā)展現(xiàn)狀、問(wèn)題及完善對(duì)策研究》10000字
- 研究生開(kāi)題報(bào)告評(píng)審表
- 《網(wǎng)絡(luò)安全與個(gè)人信息保護(hù)》主題班會(huì)課件
- 建筑集團(tuán)公司商務(wù)管理手冊(cè)(投標(biāo)、合同、采購(gòu))分冊(cè)
- 蘇教版二年級(jí)下冊(cè)《磁鐵的磁力》課件
- 幼兒園課件小小銀行家
- 美的空調(diào)制造工藝手冊(cè)
評(píng)論
0/150
提交評(píng)論