




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第8章
文件和輸入輸出流本章主要內(nèi)容:8.1輸入/輸出流8.1.1流的概念8.1.2io類(lèi)庫(kù)8.2文件處理8.2.1文件與目錄管理8.2.2文件流8.3隨機(jī)存取文件和本地可執(zhí)行文件8.3.1隨機(jī)存取文件流8.3.2本地可執(zhí)行文件8.4數(shù)據(jù)流與對(duì)象流8.4.1數(shù)據(jù)流8.4.2對(duì)象流8.5Java多媒體技術(shù)8.5.1應(yīng)用輸入流播放音頻文件8.5.2Java多媒體包JMF的應(yīng)用文件程序終端文件程序網(wǎng)絡(luò)端點(diǎn)數(shù)據(jù)流起點(diǎn)終點(diǎn)
網(wǎng)絡(luò)端點(diǎn)文件,字符串存儲(chǔ)區(qū)8.1輸入/輸出流什么是數(shù)據(jù)流?流是可被順序訪(fǎng)問(wèn)的無(wú)限長(zhǎng)的字符序列。8.1.1流的概念8.1.2io類(lèi)庫(kù)I/O流字節(jié)流字符流8.1.2io類(lèi)庫(kù)1、字節(jié)流的層次結(jié)構(gòu)8.1.2io類(lèi)庫(kù)2、字符流的層次結(jié)構(gòu)8.1.2io類(lèi)庫(kù)2、字符流的層次結(jié)構(gòu)類(lèi)名功能BufferedReader和BufferedWriter用于字符流讀寫(xiě)緩沖存儲(chǔ)。InputStreamReader和OutputStreamWriter用于將字節(jié)碼與字符碼相互轉(zhuǎn)換。FileReader和FileWriter用于字符文件的輸入輸出。8.2文件處理1、File類(lèi)2、字符文件:FileReader類(lèi)、FileWriter類(lèi)3、字節(jié)文件:FileInput類(lèi)、FileOutput類(lèi)定義在包java.io中8.2.1文件與目錄管理1、創(chuàng)建File類(lèi)文件對(duì)象
(1)所有對(duì)文件的操作都要使用File類(lèi).(2)其構(gòu)造:File(“文件名”);File(“文件所在目錄”,“文件名”);文件與應(yīng)用程序不在同一目錄文件與應(yīng)用程序在同一目錄8.2.1文件與目錄管理2、獲取文件及目錄屬性(1)判斷文件或目錄是否存在publicbooleanexists();(2)判斷是文件還是目錄publicbooleanisFile();
publicbooleanisDirectory();(3)獲取文件或目錄名稱(chēng)與路徑publicStringgetName();返回文件名或目錄名。publicStringgetPath();返回文件或目錄的路徑。8.2.1文件與目錄管理(4)獲取文件的長(zhǎng)度publiclonglength();(5)獲取文件讀寫(xiě)屬性publicbooleancanRead();publicbooleancanWrite();(6)列出目錄中的文件publicString[]list();(7)比較兩個(gè)文件或目錄publicbooleanequals(Filef);8.2.1文件與目錄管理3、文件及目錄操作
File類(lèi)中還定義了一些對(duì)文件或目錄進(jìn)行管理、操作的方法,常用的方法有:(1)重命名文件publicbooleanrenameTo(FilenewFile);(2)刪除文件publicvoiddelete();(3)創(chuàng)建目錄publicbooleanmkdir();8.2.2文件流對(duì)文件進(jìn)行輸入輸出處理的四個(gè)類(lèi):FileInputStream:字節(jié)文件輸入流;FileOutputStream:字節(jié)文件輸出流;FileReader:字符文件輸入流;FileWriter:字符文件輸出流。8.2.2文件流1、字節(jié)文件輸入流讀取文件(1)FileInputStream類(lèi)FileInputStream(Stringfilename);FileInputStream(Filefile);FileInputStream(FileDescriptorfdObj);(2)從文件輸入流中讀取字節(jié)intread();intread(byteb[]);intread(byteb[],intoff,intlen);【例8-1】在下面的程序中,讀取一個(gè)文本文件test.dat,并將其顯示到對(duì)話(huà)框上。
在編寫(xiě)程序之前,我們至少需要知道兩件事:(1)怎樣把一個(gè)流與一個(gè)文件聯(lián)系起來(lái);(2)用什么方法把從文件中讀取到的數(shù)據(jù)顯示到一個(gè)對(duì)話(huà)框中。8.2.2文件流2、字節(jié)文件輸出流寫(xiě)入文件(1)FileOutputStream類(lèi)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、字符文件流讀寫(xiě)文本文件(1)FileReader和FileWriter
FileReader(Stringfilename);FileReader(Filefile);FileReader(FileDescriptorfdObj);FileWriter(Stringfilename);FileWriter(Filefile);FileWriter(FileDescriptorfdObj);8.2.2文件流3、字符文件流讀寫(xiě)文本文件(2)用字符流進(jìn)行讀寫(xiě)操作的方法
與字節(jié)輸入輸出流的功能一樣,Reader和Writer只是建立一條通往字符文件的通道,而要實(shí)現(xiàn)對(duì)字符數(shù)據(jù)的讀寫(xiě)操作,還需要讀方法和寫(xiě)方法來(lái)完成。
8.2.2文件流從輸入流中按行讀取字符的方法:StringreadLine();向輸出流寫(xiě)入多個(gè)字符的方法:write(String
s,int
off,int
len);將指定的字符串s從偏移量off開(kāi)始的len個(gè)字符寫(xiě)入文件輸出流。刷新BufferedWriter所建立的緩沖區(qū),一次性將緩沖區(qū)中的數(shù)據(jù)寫(xiě)入文件的方法如下:flush();【例8-3】將文件a.txt讀取到文本區(qū),經(jīng)修改后,另存為b.txt。8.3隨機(jī)存取文件和本地可執(zhí)行文件隨機(jī)存取文件流RandomAccessFile類(lèi)可以讀寫(xiě)文件中任意位置上的字節(jié)、文本等數(shù)據(jù)。它有二個(gè)構(gòu)造方法:(1)RandomAccessFile(Stringfilename,Stringmode)(2)RandomAccessFile(Filefile,Stringmode)8.3.1隨機(jī)存取文件流【例8-4】用隨機(jī)存取文件流讀寫(xiě)文件。1./*隨機(jī)流*/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】使用隨機(jī)存取文件流RandomAccessFile實(shí)現(xiàn)一個(gè)英漢小詞典程序。8.3.2本地可執(zhí)行文件在Java語(yǔ)言中,使用java.lang包中的Runtime類(lèi)可以運(yùn)行本地機(jī)的可執(zhí)行文件。每個(gè)Java應(yīng)用程序都有一個(gè)Runtime類(lèi)實(shí)例對(duì)象,使應(yīng)用程序能夠與其運(yùn)行的環(huán)境相連接。但應(yīng)用程序不能創(chuàng)建自己的Runtime類(lèi)實(shí)例對(duì)象,而要通過(guò)該類(lèi)的靜態(tài)方法getRuntime()創(chuàng)建Runtime類(lèi)對(duì)象。8.3.2本地可執(zhí)行文件Runtime類(lèi)對(duì)象有幾個(gè)常用方法:(1)exit(intstatus)通過(guò)啟動(dòng)虛擬機(jī)的關(guān)閉序列,終止當(dāng)前正在運(yùn)行的Java虛擬機(jī)。(2)gc()運(yùn)行垃圾回收器。(3)getRuntime()(4)exec(Stringcommand)調(diào)用該方法可以在單獨(dú)的進(jìn)程中運(yùn)行由字符串命令指定的本地機(jī)上的可執(zhí)行文件。【例8-6】使用Runtime類(lèi)對(duì)象運(yùn)行例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)自帶的計(jì)算器。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類(lèi)設(shè)計(jì)一個(gè)Java語(yǔ)言簡(jiǎn)易編譯器,該編譯器具有編寫(xiě)源程序、編譯和運(yùn)行程序的功能。8.4數(shù)據(jù)流與對(duì)象流有許多應(yīng)用程序需要將處理的數(shù)據(jù)作為Java的一種基本類(lèi)型(如布爾型,字節(jié),整數(shù)和浮點(diǎn)數(shù))來(lái)使用。這就要用到數(shù)據(jù)流類(lèi)DataInputStream類(lèi)和DataOutputStream類(lèi)。這兩個(gè)數(shù)據(jù)流類(lèi)是很有用處的,它們?cè)试S程序按機(jī)器無(wú)關(guān)的格式讀取Java原始數(shù)據(jù)。8.4.1數(shù)據(jù)流8.4.1數(shù)據(jù)流用下面的構(gòu)造方法就可以建立DataInputStream類(lèi)和DataOutputStream類(lèi)的實(shí)例:publicDataInputStream(InputStreamin);publicDataOutputStream(OutputStreamout);8.4.1數(shù)據(jù)流方法功能close()關(guān)閉流并釋放資源。readBoolean()
讀取一個(gè)布爾值。readByte()讀取一個(gè)字節(jié)。readInt()從文件中讀取一個(gè)int值。readUTF()從文件中讀取一個(gè)UTF字符串。seekByte(intpos)設(shè)置文件指針偏移量,在該位置發(fā)生下一個(gè)讀取或?qū)懭氩僮?。writeBoolean(booleanb)把一個(gè)布爾值作為單字節(jié)值寫(xiě)入。writeChars(Strings)向文件寫(xiě)入一個(gè)字符串。writeInt(intv)向文件寫(xiě)入一個(gè)int值。writeBytes(Strings)向文件寫(xiě)入一個(gè)字符串。writeUTF(Stringstr)使用UTF-8編碼將一個(gè)字符串寫(xiě)入該文件?!纠?-9】應(yīng)用DataInputStream類(lèi)和DataOutputStream類(lèi)復(fù)制聲音文件。
8.4.2對(duì)象流Java可以將對(duì)象作為一個(gè)整體通過(guò)對(duì)象流進(jìn)行傳輸和存儲(chǔ)。1、對(duì)象流的構(gòu)造方法ObjectInputStream類(lèi)和ObjectOutputStream類(lèi)的構(gòu)造方法為:ObjectInputStream(InputStreamin);ObjectOutputStream(OutputStreamout);【例8-10】編寫(xiě)程序,在窗體中實(shí)例化球面板對(duì)象,當(dāng)單擊“寫(xiě)入文件”按鈕后,能將球面板對(duì)象寫(xiě)入到一個(gè)文件中。當(dāng)單擊“讀取對(duì)象”按鈕后,再將該球面板對(duì)象從文件中取出,并在窗體中顯示。
8.4.2對(duì)象流2、對(duì)象序列化序列化是一個(gè)很重要的概念,當(dāng)我們使用對(duì)象流寫(xiě)入或讀出一個(gè)對(duì)象時(shí),其前提是這個(gè)對(duì)象必須是序列化的。這是因?yàn)槲覀儼岩粋€(gè)對(duì)象寫(xiě)入到文件后,能再把這個(gè)對(duì)象正確地讀回到程序中來(lái)。人們把將一個(gè)對(duì)象轉(zhuǎn)化為適合傳輸或磁盤(pán)存儲(chǔ)的數(shù)據(jù)流的過(guò)程稱(chēng)為對(duì)象序列化。Java提供給我們的絕大多數(shù)類(lèi)對(duì)象都是序列化對(duì)象,比如組件等。用戶(hù)自己定義的類(lèi)需要序列化時(shí),必須實(shí)現(xiàn)Serializable接口。
【例8-11】編寫(xiě)一個(gè)簡(jiǎn)單的程序,保存日期、地址對(duì)象到一個(gè)對(duì)象流中。程序的第一個(gè)任務(wù)就是保證Address類(lèi)序列化,因此必須使這個(gè)類(lèi)實(shí)Serializable接口。要存儲(chǔ)對(duì)象數(shù)據(jù),還需要建立一個(gè)ObjectOutputStream對(duì)象:ObjectOutputStreamout;out=newObjectOutputStream(newFileOutputStream(“sample.data”));其次,只要簡(jiǎn)單地使用ObjectOutputStream類(lèi)中的writeObject方法,例如下列形式:Addressaddress=newAddress(“abc”,“abc@”);out.writeObject(address);根據(jù)Date類(lèi)的定義,它是已序列化的,所以我們要寫(xiě)入流中的所有對(duì)象都已序列化.8.5Java多媒體技術(shù)在Sun公司的jdk自帶的rt.jar包文件中,有AudioStream.class、AudioPlayer.class類(lèi)用于播放聲音文件,我們可以使用輸入流: FileInputStreamfile=newFil
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 口腔健康知識(shí)培訓(xùn)課件
- 校園里的一處景物
- 培訓(xùn)講師的基本知識(shí)課件
- 2025年跨境電商電子元器件交易與物流服務(wù)合同
- 2025年度新能源汽車(chē)車(chē)牌租賃與深度保養(yǎng)維護(hù)合作協(xié)議
- 2025年新能源項(xiàng)目合作協(xié)議(含環(huán)保責(zé)任與收益分配)
- 2025年綠色生態(tài)草料種植技術(shù)合作與市場(chǎng)購(gòu)銷(xiāo)協(xié)議
- 2025年政府機(jī)關(guān)綠色節(jié)能改造項(xiàng)目設(shè)備采購(gòu)與施工安裝合同
- 2025年度豪華精裝公寓租賃及配套服務(wù)合同
- 培訓(xùn)獲得的知識(shí)課件
- 資產(chǎn)收購(gòu)方案(3篇)
- 混凝土立方體抗壓強(qiáng)度試驗(yàn)工程材料試驗(yàn)與檢測(cè)63課件
- 小學(xué)數(shù)學(xué)有效作業(yè)設(shè)計(jì)講座
- 2025年中國(guó)郵政集團(tuán)工作人員招聘考試筆試試題(含答案)
- 規(guī)范大件運(yùn)輸管理制度
- 藥學(xué)處方審核培訓(xùn)
- T-MSC 005-2024 靈芝孢子油生產(chǎn)加工技術(shù)規(guī)范
- 職業(yè)院校班主任輔導(dǎo)員培訓(xùn)
- 貿(mào)易意向合作協(xié)議書(shū)范本
- 校園活動(dòng)講安全
- DB37T 5230-2022 巖棉復(fù)合板外墻外保溫系統(tǒng)應(yīng)用技術(shù)規(guī)程
評(píng)論
0/150
提交評(píng)論