版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第8章
文件和輸入輸出流本章主要內(nèi)容:8.1輸入/輸出流8.1.1流的概念8.1.2io類庫8.2文件處理8.2.1文件與目錄管理8.2.2文件流8.3隨機存取文件和本地可執(zhí)行文件8.3.1隨機存取文件流8.3.2本地可執(zhí)行文件8.4數(shù)據(jù)流與對象流8.4.1數(shù)據(jù)流8.4.2對象流8.5Java多媒體技術(shù)8.5.1應(yīng)用輸入流播放音頻文件8.5.2Java多媒體包JMF的應(yīng)用文件程序終端文件程序網(wǎng)絡(luò)端點數(shù)據(jù)流起點終點
網(wǎng)絡(luò)端點文件,字符串存儲區(qū)8.1輸入/輸出流什么是數(shù)據(jù)流?流是可被順序訪問的無限長的字符序列。8.1.1流的概念8.1.2io類庫I/O流字節(jié)流字符流8.1.2io類庫1、字節(jié)流的層次結(jié)構(gòu)8.1.2io類庫2、字符流的層次結(jié)構(gòu)8.1.2io類庫2、字符流的層次結(jié)構(gòu)類名功能BufferedReader和BufferedWriter用于字符流讀寫緩沖存儲。InputStreamReader和OutputStreamWriter用于將字節(jié)碼與字符碼相互轉(zhuǎn)換。FileReader和FileWriter用于字符文件的輸入輸出。8.2文件處理1、File類2、字符文件:FileReader類、FileWriter類3、字節(jié)文件:FileInput類、FileOutput類定義在包java.io中8.2.1文件與目錄管理1、創(chuàng)建File類文件對象
(1)所有對文件的操作都要使用File類.(2)其構(gòu)造:File(“文件名”);File(“文件所在目錄”,“文件名”);文件與應(yīng)用程序不在同一目錄文件與應(yīng)用程序在同一目錄8.2.1文件與目錄管理2、獲取文件及目錄屬性(1)判斷文件或目錄是否存在publicbooleanexists();(2)判斷是文件還是目錄publicbooleanisFile();
publicbooleanisDirectory();(3)獲取文件或目錄名稱與路徑publicStringgetName();返回文件名或目錄名。publicStringgetPath();返回文件或目錄的路徑。8.2.1文件與目錄管理(4)獲取文件的長度publiclonglength();(5)獲取文件讀寫屬性publicbooleancanRead();publicbooleancanWrite();(6)列出目錄中的文件publicString[]list();(7)比較兩個文件或目錄publicbooleanequals(Filef);8.2.1文件與目錄管理3、文件及目錄操作
File類中還定義了一些對文件或目錄進行管理、操作的方法,常用的方法有:(1)重命名文件publicbooleanrenameTo(FilenewFile);(2)刪除文件publicvoiddelete();(3)創(chuàng)建目錄publicbooleanmkdir();8.2.2文件流對文件進行輸入輸出處理的四個類:FileInputStream:字節(jié)文件輸入流;FileOutputStream:字節(jié)文件輸出流;FileReader:字符文件輸入流;FileWriter:字符文件輸出流。8.2.2文件流1、字節(jié)文件輸入流讀取文件(1)FileInputStream類FileInputStream(Stringfilename);FileInputStream(Filefile);FileInputStream(FileDescriptorfdObj);(2)從文件輸入流中讀取字節(jié)intread();intread(byteb[]);intread(byteb[],intoff,intlen);【例8-1】在下面的程序中,讀取一個文本文件test.dat,并將其顯示到對話框上。
在編寫程序之前,我們至少需要知道兩件事:(1)怎樣把一個流與一個文件聯(lián)系起來;(2)用什么方法把從文件中讀取到的數(shù)據(jù)顯示到一個對話框中。8.2.2文件流2、字節(jié)文件輸出流寫入文件(1)FileOutputStream類FileOutputStream(Stringfilename)FileOutputStream(Filefile)FileOutputStream(FileDescriptorfdObj)(2)把字節(jié)發(fā)送到文件輸出流write(int
b);write(byte[]
b);write(byte[]
b,int
off,int
len);【例8-2】復(fù)制圖像文件a.jpg,并且更名為b.jpg。8.2.2文件流3、字符文件流讀寫文本文件(1)FileReader和FileWriter
FileReader(Stringfilename);FileReader(Filefile);FileReader(FileDescriptorfdObj);FileWriter(Stringfilename);FileWriter(Filefile);FileWriter(FileDescriptorfdObj);8.2.2文件流3、字符文件流讀寫文本文件(2)用字符流進行讀寫操作的方法
與字節(jié)輸入輸出流的功能一樣,Reader和Writer只是建立一條通往字符文件的通道,而要實現(xiàn)對字符數(shù)據(jù)的讀寫操作,還需要讀方法和寫方法來完成。
8.2.2文件流從輸入流中按行讀取字符的方法:StringreadLine();向輸出流寫入多個字符的方法:write(String
s,int
off,int
len);將指定的字符串s從偏移量off開始的len個字符寫入文件輸出流。刷新BufferedWriter所建立的緩沖區(qū),一次性將緩沖區(qū)中的數(shù)據(jù)寫入文件的方法如下:flush();【例8-3】將文件a.txt讀取到文本區(qū),經(jīng)修改后,另存為b.txt。8.3隨機存取文件和本地可執(zhí)行文件隨機存取文件流RandomAccessFile類可以讀寫文件中任意位置上的字節(jié)、文本等數(shù)據(jù)。它有二個構(gòu)造方法:(1)RandomAccessFile(Stringfilename,Stringmode)(2)RandomAccessFile(Filefile,Stringmode)8.3.1隨機存取文件流【例8-4】用隨機存取文件流讀寫文件。1./*隨機流*/2.importjava.io.*;3.classExample8_44.{5. publicstaticvoidmain(String[]args)6. {7. try{8. RandomAccessFilef=newandomAccessFile("a.txt","rw");9. f.writeBytes("Zhangsiming");10. f.close();11. }12. catch(IOExceptione){13. System.out.println(e);14. }15. }16.}【例8-5】使用隨機存取文件流RandomAccessFile實現(xiàn)一個英漢小詞典程序。8.3.2本地可執(zhí)行文件在Java語言中,使用java.lang包中的Runtime類可以運行本地機的可執(zhí)行文件。每個Java應(yīng)用程序都有一個Runtime類實例對象,使應(yīng)用程序能夠與其運行的環(huán)境相連接。但應(yīng)用程序不能創(chuàng)建自己的Runtime類實例對象,而要通過該類的靜態(tài)方法getRuntime()創(chuàng)建Runtime類對象。8.3.2本地可執(zhí)行文件Runtime類對象有幾個常用方法:(1)exit(intstatus)通過啟動虛擬機的關(guān)閉序列,終止當前正在運行的Java虛擬機。(2)gc()運行垃圾回收器。(3)getRuntime()(4)exec(Stringcommand)調(diào)用該方法可以在單獨的進程中運行由字符串命令指定的本地機上的可執(zhí)行文件?!纠?-6】使用Runtime類對象運行例8-5。
1.publicclassExample8_62.{publicstaticvoidmain(Stringargs[])3.{4.try{5.Runtimert=Runtime.getRuntime();6.rt.exec("javaExample8_5");7.}8.catch(Exceptione){System.out.println(e);}9.}10.}【例8-7】調(diào)用Windows系統(tǒng)自帶的計算器。1.publicclassExample8_72.{publicstaticvoidmain(Stringargs[])3.{4.try{5.Runtimert=Runtime.getRuntime();6.rt.exec("c:/windows/system32/calc.exe");7.}catch(Exceptione){System.out.println(e);}8.}9.}【例8-8】應(yīng)用Runtime類設(shè)計一個Java語言簡易編譯器,該編譯器具有編寫源程序、編譯和運行程序的功能。8.4數(shù)據(jù)流與對象流有許多應(yīng)用程序需要將處理的數(shù)據(jù)作為Java的一種基本類型(如布爾型,字節(jié),整數(shù)和浮點數(shù))來使用。這就要用到數(shù)據(jù)流類DataInputStream類和DataOutputStream類。這兩個數(shù)據(jù)流類是很有用處的,它們允許程序按機器無關(guān)的格式讀取Java原始數(shù)據(jù)。8.4.1數(shù)據(jù)流8.4.1數(shù)據(jù)流用下面的構(gòu)造方法就可以建立DataInputStream類和DataOutputStream類的實例:publicDataInputStream(InputStreamin);publicDataOutputStream(OutputStreamout);8.4.1數(shù)據(jù)流方法功能close()關(guān)閉流并釋放資源。readBoolean()
讀取一個布爾值。readByte()讀取一個字節(jié)。readInt()從文件中讀取一個int值。readUTF()從文件中讀取一個UTF字符串。seekByte(intpos)設(shè)置文件指針偏移量,在該位置發(fā)生下一個讀取或?qū)懭氩僮?。writeBoolean(booleanb)把一個布爾值作為單字節(jié)值寫入。writeChars(Strings)向文件寫入一個字符串。writeInt(intv)向文件寫入一個int值。writeBytes(Strings)向文件寫入一個字符串。writeUTF(Stringstr)使用UTF-8編碼將一個字符串寫入該文件?!纠?-9】應(yīng)用DataInputStream類和DataOutputStream類復(fù)制聲音文件。
8.4.2對象流Java可以將對象作為一個整體通過對象流進行傳輸和存儲。1、對象流的構(gòu)造方法ObjectInputStream類和ObjectOutputStream類的構(gòu)造方法為:ObjectInputStream(InputStreamin);ObjectOutputStream(OutputStreamout);【例8-10】編寫程序,在窗體中實例化球面板對象,當單擊“寫入文件”按鈕后,能將球面板對象寫入到一個文件中。當單擊“讀取對象”按鈕后,再將該球面板對象從文件中取出,并在窗體中顯示。
8.4.2對象流2、對象序列化序列化是一個很重要的概念,當我們使用對象流寫入或讀出一個對象時,其前提是這個對象必須是序列化的。這是因為我們把一個對象寫入到文件后,能再把這個對象正確地讀回到程序中來。人們把將一個對象轉(zhuǎn)化為適合傳輸或磁盤存儲的數(shù)據(jù)流的過程稱為對象序列化。Java提供給我們的絕大多數(shù)類對象都是序列化對象,比如組件等。用戶自己定義的類需要序列化時,必須實現(xiàn)Serializable接口。
【例8-11】編寫一個簡單的程序,保存日期、地址對象到一個對象流中。程序的第一個任務(wù)就是保證Address類序列化,因此必須使這個類實Serializable接口。要存儲對象數(shù)據(jù),還需要建立一個ObjectOutputStream對象:ObjectOutputStreamout;out=newObjectOutputStream(newFileOutputStream(“sample.data”));其次,只要簡單地使用ObjectOutputStream類中的writeObject方法,例如下列形式:Addressaddress=newAddress(“abc”,“abc@”);out.writeObject(address);根據(jù)Date類的定義,它是已序列化的,所以我們要寫入流中的所有對象都已序列化.8.5Java多媒體技術(shù)在Sun公司的jdk自帶的rt.jar包文件中,有AudioStream.class、AudioPlayer.class類用于播放聲音文件,我們可以使用輸入流: FileInputStreamfile=newFil
溫馨提示
- 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)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年建筑涂料噴涂勞務(wù)合同3篇
- 2024年度導(dǎo)演與影視活動策劃公司簽約合同范本模板3篇
- 2025中國鐵路上海局集團限公司招聘11人高頻重點提升(共500題)附帶答案詳解
- 2025中國聯(lián)通天津市分公司春季校園招聘100人高頻重點提升(共500題)附帶答案詳解
- 2025中國石油遼河油田分公司高校畢業(yè)生招聘90人高頻重點提升(共500題)附帶答案詳解
- 2025中國煙草總公司大連市公司招聘24人高頻重點提升(共500題)附帶答案詳解
- 2025中國建材集團限公司總部招聘1人高頻重點提升(共500題)附帶答案詳解
- 2025下半年重慶巫溪縣機關(guān)事業(yè)單位遴選27人高頻重點提升(共500題)附帶答案詳解
- 2025下半年浙江省舟山群島新區(qū)航空產(chǎn)業(yè)園管委會招聘2人歷年高頻重點提升(共500題)附帶答案詳解
- 2025下半年江蘇金陵科技學院招聘高層次人才80人高頻重點提升(共500題)附帶答案詳解
- GB/T 1094.7-2024電力變壓器第7部分:油浸式電力變壓器負載導(dǎo)則
- 機動車檢測站新?lián)Q版20241124質(zhì)量管理手冊
- 2025版國家開放大學法律事務(wù)??啤斗勺稍兣c調(diào)解》期末紙質(zhì)考試單項選擇題題庫
- 廣東省深圳市2023-2024學年高一上學期期末考試物理試題(含答案)
- 2024小學數(shù)學義務(wù)教育新課程標準(2022版)必考題庫附含答案
- 國家開放大學本科《公共部門人力資源管理》期末紙質(zhì)考試總題庫2025版
- 電動力學智慧樹知到期末考試答案章節(jié)答案2024年太原理工大學
- 改變世界的材料智慧樹知到期末考試答案2024年
- 人大版《精算模型(第3版)》習題解答
- 人文英語4寫作
- 型濾池計算說明書
評論
0/150
提交評論