Java程序設(shè)計任務(wù)驅(qū)動式教程 任務(wù)二十五 順序進出之道(文件的順序訪問).ppt_第1頁
Java程序設(shè)計任務(wù)驅(qū)動式教程 任務(wù)二十五 順序進出之道(文件的順序訪問).ppt_第2頁
Java程序設(shè)計任務(wù)驅(qū)動式教程 任務(wù)二十五 順序進出之道(文件的順序訪問).ppt_第3頁
Java程序設(shè)計任務(wù)驅(qū)動式教程 任務(wù)二十五 順序進出之道(文件的順序訪問).ppt_第4頁
Java程序設(shè)計任務(wù)驅(qū)動式教程 任務(wù)二十五 順序進出之道(文件的順序訪問).ppt_第5頁
已閱讀5頁,還剩25頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

1、,Java程序設(shè)計任務(wù)驅(qū)動式教程,主編:孫修東、王永紅 高職高專規(guī)劃示范教材,北京航空航天大學(xué)出版社,230,目錄,任務(wù)一 搭建環(huán)境(構(gòu)建Java集成開發(fā)環(huán)境),任務(wù)二 Java歡迎你(開發(fā)簡單Java應(yīng)用程序,任務(wù)三 小試牛刀(學(xué)習(xí)Java語言基礎(chǔ)),任務(wù)四 挑戰(zhàn)選擇(使用分支控制流程),任務(wù)五 游戲人生(使用循環(huán)控制流程),任務(wù)六 回歸自然(創(chuàng)建、使用類和對象),任務(wù)七 3G時代的消息傳遞(定義和使用類方法),任務(wù)八 保護你的隱私(封裝的使用),任務(wù)九 子承父業(yè)(繼承和多態(tài)的使用),任務(wù)十 上帝萬能之手(接口的使用),330,任務(wù)十一 用數(shù)組存儲信息(使用數(shù)組),任務(wù)十二 使用字符串進行交

2、流(使用字符串),任務(wù)十三 防患于未然(捕獲并處理異常),任務(wù)十四 主動出擊(拋出異常),任務(wù)十五 認(rèn)識Java Applet(Applet入門),任務(wù)十六 豐富多彩的Applet(在Applet中播放聲音和顯示圖像),任務(wù)十七 進入Windows世界(設(shè)計圖形用戶界面),任務(wù)十八 布局規(guī)劃(使用布局管理器),任務(wù)十九 事件委托處理(如何處理事件),任務(wù)二十 選擇之道(使用選擇控件和選擇事件),目錄,430,任務(wù)二十一 簡明清晰的菜單(使用菜單和其他常用事件),任務(wù)二十二 訪問數(shù)據(jù)(使用JDBC連接數(shù)據(jù)庫),任務(wù)二十三 訪問數(shù)據(jù)升級(數(shù)據(jù)庫編程),任務(wù)二十四 文件管理(目錄與文件管理),任務(wù)二

3、十五 順序進出之道(文件的順序訪問),任務(wù)二十六 隨機進出之道(文件的隨機訪問),任務(wù)二十七 JAVA的分身術(shù)(創(chuàng)建和啟動線程),任務(wù)二十八 線程的生命周期與優(yōu)先級(線程的狀態(tài)與調(diào)度),任務(wù)二十九 基于連接的通信(Java中的套接字Socket),任務(wù)三十 基于無連接的通信(Java中的數(shù)據(jù)報編程),目錄,530,任務(wù)二十五 順序進出之道(文件的順序訪問),2,1,知識目標(biāo),能力目標(biāo),順序文本文件;FileReader文件;FileWriter文件;流的操作步驟。,理解什么是流文件;掌握文件的順序訪問方式。,630,內(nèi)容提要,4,跟我做:創(chuàng)建文件,1,2,3,5,實現(xiàn)方案,代碼分析,必備知識,

4、動手做一做,730,25.1 跟我做:創(chuàng)建文件,任務(wù)情景 編寫一個程序FileIo,該測試程序?qū)⒃闯绦蛭募﨔ileIo.java另存為FileIODemo.txt。 運行結(jié)果 找到FileIo.java所在的文件夾,會發(fā)現(xiàn)有一個FileIo.txt的文件,文件中的內(nèi)容即為FileIo.java的文件內(nèi)容,并有對應(yīng)的行號。 1:import java.io.*; 2:public class FileIo 3: private String strtemp; 4: private String strfinal=new String(); 5: public static void main(S

5、tring args)throws IOException ,第1章目錄,830,25.2 實現(xiàn)方案,首先必須創(chuàng)建一個打開文件的方法,用于將源程序文件打開。在該方法中,將打開的文件的內(nèi)容讀入緩存,讀入時是采用逐行讀入的方式。讀寫完成后要將文件及時關(guān)閉。 再創(chuàng)建一個保存文件的方法,用于將緩存中的文件寫入目標(biāo)文件,即FileIODemo.txt文件中。在該方法中,首先要創(chuàng)建一個目標(biāo)文件,然后逐行讀出緩存中的內(nèi)容,最后也要將兩個文件都關(guān)閉。 在這個程序中,使用了FileReader和FileWriter這兩個類,這兩個類都典型地表示了一種對順序文本文件的訪問方式。,第1章目錄,930,程序代碼 im

6、port java.io.*; public class FileIo private String strtemp; private String strfinal=new String(); public static void main(String args)throws IOException FileIo obj=new FileIo(); obj.open(FileIo.java); /調(diào)用打開文件方法 obj.saveAs(FileIo.txt); /調(diào)用另存為方法 public void open(String filename) try BufferedReader in=

7、new BufferedReader(new FileReader(filename); while(strtemp=in.readLine()!=null) strfinal=strfinal+strtemp+n; /內(nèi)容 in.close(); catch(IOException e) public void saveAs(String filename) try BufferedReader in=new BufferedReader(new StringReader(strfinal); PrintWriter out=new PrintWriter(new BufferedWrite

8、r(new FileWriter(filename); int lineCount=1; while(strtemp=in.readLine()!=null) out.println(lineCount+:+strtemp); /行號+內(nèi)容 in.close(); out.close(); catch(IOException e) ,25.3 代碼分析,1030,應(yīng)用擴展 利用java.io包的FileInputStream、FileOutputStream流類也可以對文件進行最基本的字節(jié)順序讀寫。利用一個File類的對象,就可以通過以下的構(gòu)造方法分別創(chuàng)建FileInputStream對象和F

9、ileOutputStream對象。 FileInputStream(File file) FileOutputStrea(File file) FileInputStream、FileOutputStream類的最常用的方法是read()、available()、write()和close()。,25.3 代碼分析,1130,25.4 必備知識,25.4.1 輸入輸出流操作一般步驟 前面講過輸入輸出流的概念,當(dāng)我們需要在數(shù)據(jù)源與目標(biāo)之間讀取或者寫入數(shù)據(jù)時,就要在他們之間建立流連接。這就象我們電腦中的硬盤一樣,我們要使用硬盤,讀取或者寫入數(shù)據(jù),首先要將硬盤同電腦的主板連接起來,那么主板與硬盤之

10、間就有一條數(shù)據(jù)線起到連接的作用,通過數(shù)據(jù)線來寫入或者讀取數(shù)據(jù)。這個數(shù)據(jù)線就相當(dāng)于流的作用。那么如何建立呢?在java的基礎(chǔ)類庫中,提供了兩種IO包來操作流,一種就是經(jīng)常會使用到的java.io包,還有一種是jdk1.4引入的新IO包java.nio.*,這個包基本上是對原IO包進行了重新封裝,以便提供更快的速度。 基本上進行讀取或者寫入操作的時候按照下面五個步驟:,第1章目錄,1230,25.4 必備知識,(1)首先要明確是需要讀取還是寫入操作,從而選擇是使用Input/Output或者Reader/Writer; (2)明確操作的目標(biāo)是什么,文件或者緩存、對象等等,從而選定具體操作的類; (

11、3)選定好了類之后,我們就需要創(chuàng)建該類的對象,創(chuàng)建對象時一般是通過傳入該類構(gòu)造器的參數(shù)來建立流連接; (4)完成讀和寫的操作。一般這些類當(dāng)中都有read()或者write()方法,一個是讀入流的方法,一個是寫入流的方法; (5)最后要使用close()關(guān)閉流連接,刷新緩存,釋放資源。,第1章目錄,1330,25.4 必備知識,25.4.2 InputStream和OutputStream 1.字節(jié)輸入流 InputStream是輸入字節(jié)數(shù)據(jù)用的類,它定義了所有輸入流所需要的方法。如表25-1所示。,第1章目錄,1430,25.4 必備知識,2.字節(jié)輸出流 OoutputStream是輸出字節(jié)數(shù)

12、據(jù)用的類,它定義了所有輸出流所需要的方法。如表25-2所示。,1530,25.4.3 InputStream和FileOutputStream FileInputStream 從文件系統(tǒng)中的某個文件中獲得輸入字節(jié)。哪些文件可用取決于主機的環(huán)境。它一般用于讀取諸如圖像數(shù)據(jù)之類的原始字節(jié)流。而FileOutputStream是用于將數(shù)據(jù)寫入 File 或 FileDescriptor 的輸出流。文件是否可用或能否可以被創(chuàng)建取決于基礎(chǔ)平臺。特別是某些平臺一次只允許一個 FileOutputStream(或其他文件寫入對象)打開文件進行寫入。在這種情況下,如果所涉及的文件已經(jīng)打開,則此類中的構(gòu)造方法將

13、失敗。要讀取或?qū)懭胱址?,請考慮使用 FileReader或FileWriter。InputStream是從InputStream中派生出來的簡單輸入類。該類的所有方法都是從InputStream類繼承來的。同樣,F(xiàn)ileOutputStream則是從OutputStream中派生出來的輸出類。,25.4 必備知識,1630,25.4.4 DataInputStream和DataOutputStream DataInputStream和DataOutputStream類創(chuàng)建的對象被稱為數(shù)據(jù)輸入流和數(shù)據(jù)輸出流。這是很有用的兩個流,他們允許程序按著機器無關(guān)的風(fēng)格讀取Java原始數(shù)據(jù)。也就是說,當(dāng)我

14、們讀取一個數(shù)值時,不必再關(guān)心這個數(shù)值應(yīng)當(dāng)是多少個字節(jié)。 1.DataInputStream類和DataOutputStream類的構(gòu)造方法 DataInputStream(InputStream in)將創(chuàng)建的數(shù)據(jù)輸入流指向一個由參數(shù)in指定的輸入流,以便從后者讀取數(shù)據(jù)(按著機器無關(guān)的風(fēng)格讀取)。 DataOutputStream(OutputStream out)將創(chuàng)建的數(shù)據(jù)輸出流指向一個由參數(shù)out指定的輸出流,然后通過這個數(shù)據(jù)輸出流把Java數(shù)據(jù)類型的數(shù)據(jù)寫到輸出流out。,25.4 必備知識,1730,25.4 必備知識,2.DataInputStream類和DataOutputStr

15、eam類的部分方法,1830,25.4 必備知識,1930,25.4 必備知識,25.4.5 BufferedInputStream和BufferedOutputStream 為了減少設(shè)備的輸入輸出次數(shù),加快輸入輸出速度,Java提供了帶緩沖的輸入輸出過濾流類BufferedInputStream和BufferedOutputStream,簡稱緩沖過濾流類。這兩個類均有兩個構(gòu)造函數(shù),其中一個用于指定緩沖區(qū)的大小。他們的構(gòu)造函數(shù)如下: BufferedInputStream(InputStream in) BufferedInputStream(InputStream in,int size)

16、BufferedOutputStream(OutputStream out) BufferedOutputStream(OutputStream Out,int size) 其中size分別指定輸入輸出緩沖區(qū)的大小,默認(rèn)緩沖區(qū)的大小為512個字節(jié)。 BufferedInputStream和BufferedOutputStream的常用方法見表25-4。,2030,25.4 必備知識,2130,25.4 必備知識,25.4.6 Reader和Writer 1.字符類輸入流 Reader類是輸入字符數(shù)據(jù)用的類,與InputStream類相比,差別在于InputStream類中用的是byte類型,而

17、Reader類中用的是char類型,其方法如表25-5所示。,2230,25.4 必備知識,2.字符類輸出流 Writer類是輸出字符數(shù)據(jù)用的類,與OutputStream類相比,差別在于OutputStream類中用的是byte類型,而Writer類中用的是char類型,其方法如表25-6所示。,2330,25.4.7 InputStreamReader和OutputStreamWriter 這兩個是轉(zhuǎn)換流,他們實現(xiàn)了Unicode相同指定編碼的字節(jié)流,或者本機系統(tǒng)的默認(rèn)編碼的字節(jié)流之間的轉(zhuǎn)換。一個InputStreamReader對象接受一個字節(jié)輸入流作為源,產(chǎn)生相關(guān)的Unicode字符;

18、一個OutputStreamReader對象接收一個字節(jié)輸出流作為目標(biāo),產(chǎn)生Unicode字符的字節(jié)編碼格式。默認(rèn)情況下,這些轉(zhuǎn)換流將以平臺的默認(rèn)編碼方式工作,但是,也能指定其他編碼方式。這些類起著“粘合劑”的作用,它使我們以一種統(tǒng)一的、平臺無關(guān)的方式,使用現(xiàn)存的8位字符編碼,用于本機字符集。值得注意的是,這種轉(zhuǎn)換是單向的,并不存在把字符流轉(zhuǎn)換成字節(jié)流的類。 InputStreamReader和OutputStreamWriter類的常用方法如表25-7所示。,25.4 必備知識,2430,25.4 必備知識,2530,25.4.8 FileReader和FileWriter FileRead

19、er和FileWriter是與FileInputStream類和FileOutputStream類等價的讀取器,它們分別是Reader和Writer的子類。FileInputStream使用字節(jié)讀取文件,字節(jié)流不能直接操作Unicode字符,所以Java提供了字符流。由于漢字在文件中占用2個字節(jié),如果使用字節(jié)流,讀取不當(dāng)會出現(xiàn)亂碼現(xiàn)象,采用字符流就可以避免這個現(xiàn)象,因為,在Unicode字符中,一個漢字被看做一個字符。 FileReader類的方法繼承自類 java.io.InputStreamReader、java.io.Reader和java.lang.Object。常用的方法有close

20、, getEncoding, read, ready,mark, markSupported, reset, skip,clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait。 FileWriter類的方法繼承自類java.io.OutputStreamReader、java.io.Writer和java.lang.Object。常用的方法有close, flush, getEncoding, write、append、clone, equals, finalize, getClass, ha

21、shCode, notify, notifyAll, toString, wait。用法參照以上類。,25.4 必備知識,2630,25.4.9 BufferedReader和BufferedWriter BufferedReader類從字符輸入流中讀取文本,緩沖各個字符,從而實現(xiàn)字符、數(shù)組和行的高效讀取。它可以指定緩沖區(qū)的大小,或者可使用默認(rèn)的大小。大多數(shù)情況下,默認(rèn)值就足夠大了。 通常,Reader 所作的每個讀取請求都會導(dǎo)致對底層字符或字節(jié)流進行相應(yīng)的讀取請求。因此,建議用 BufferedReader 包裝所有其 read() 操作可能開銷很高的 Reader(如 FileReader

22、 和 InputStreamReader)。例如: BufferedReader in = new BufferedReader(new FileReader(foo.in); BufferedWriter類將文本寫入字符輸出流,緩沖各個字符,從而提供單個字符、數(shù)組和字符串的高效寫入。該類提供了 newLine() 方法,它使用平臺自己的行分隔符概念,此概念由系統(tǒng)屬性 line.separator 定義。并非所有平臺都使用新行符 (n) 來終止各行。因此調(diào)用此方法來終止每個輸出行要優(yōu)于直接寫入新行符。 通常 Writer 將其輸出立即發(fā)送到底層字符或字節(jié)流。除非要求提示輸出,否則建議用 Buf

23、feredWriter 包裝所有其 write() 操作可能開銷很高的 Writer(如 FileWriters 和 OutputStreamWriters)。例如: PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter(foo.out)。 BufferedReader和BufferedWriter類的常用方法見表25-8所示。,25.4 必備知識,2730,25.4 必備知識,2830,25.5 動手做一做,一、實訓(xùn)目的 掌握輸入輸出類的常用方法;掌握文件的順序訪問方法;掌握常用的輸入輸出類的用法。 二、實訓(xùn)內(nèi)容 1.編寫一個程序FileEncrypt,讀取文件的字節(jié)碼,然后取出8位的字節(jié)碼的高4位和低4位進行交換,形成一個新的字節(jié),以此進行文件的加密。例如,10101101字節(jié)碼,高4位為1010,低4位為1101,交換生成一個新的字節(jié)11011010。 2.編寫一個程序,實現(xiàn)寫幾個Java類型的數(shù)據(jù)到一個文件,并再讀出來。 三、簡要提示 實訓(xùn)1:為了取出高4位和低4位,可將字節(jié)整數(shù)用16相除,求出的商數(shù)即為高4位數(shù)字,求出的余數(shù)即為低4位的數(shù)字。由于這種加密方法具有對稱性,因此利用FileEncrypt程序加密某個文件后,再次執(zhí)行該程序處理加密后的文件,就相當(dāng)于將加密后的文件進

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論