![第8章文件和輸入輸出流_第1頁(yè)](http://file4.renrendoc.com/view/e4542f9943fc5fae7986415a76cf257c/e4542f9943fc5fae7986415a76cf257c1.gif)
![第8章文件和輸入輸出流_第2頁(yè)](http://file4.renrendoc.com/view/e4542f9943fc5fae7986415a76cf257c/e4542f9943fc5fae7986415a76cf257c2.gif)
![第8章文件和輸入輸出流_第3頁(yè)](http://file4.renrendoc.com/view/e4542f9943fc5fae7986415a76cf257c/e4542f9943fc5fae7986415a76cf257c3.gif)
![第8章文件和輸入輸出流_第4頁(yè)](http://file4.renrendoc.com/view/e4542f9943fc5fae7986415a76cf257c/e4542f9943fc5fae7986415a76cf257c4.gif)
![第8章文件和輸入輸出流_第5頁(yè)](http://file4.renrendoc.com/view/e4542f9943fc5fae7986415a76cf257c/e4542f9943fc5fae7986415a76cf257c5.gif)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(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.2
io類(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.2
Java多媒體包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ù)流?8.1.1流的概念什么是流?流是計(jì)算機(jī)各部件之間的數(shù)據(jù)流動(dòng),按傳輸方向可分為輸入流和輸出流。按內(nèi)容可分為字節(jié)流和字符流。輸入流指從某個(gè)數(shù)據(jù)來(lái)源(如鍵盤(pán),鼠標(biāo),文件等)輸入的數(shù)據(jù)序列輸出流指將向某個(gè)數(shù)據(jù)目的地(如屏幕,文件,網(wǎng)絡(luò)等)輸出的數(shù)據(jù)序列java.io包中定義與輸入、輸出流相關(guān)的類(lèi)和接口,構(gòu)成了Java語(yǔ)言的I/O框架java.io包中類(lèi)和接口從功能上主要分為字符流類(lèi)型和字節(jié)流類(lèi)型字符流是指數(shù)據(jù)序列的基本構(gòu)成單位是16位的Unicode字符數(shù)據(jù),如各類(lèi)基于字符編碼的文本文件字節(jié)流是指數(shù)據(jù)序列的基本構(gòu)成單位是8位的字節(jié)數(shù)據(jù),如各類(lèi)基于二進(jìn)制數(shù)據(jù)的文件8.1.2
io類(lèi)庫(kù)I/O流字節(jié)流字符流1.InputStreamReader是字節(jié)流通向字符流的橋梁:把讀取的字節(jié)型數(shù)據(jù)解碼為字符型數(shù)據(jù)。2.OutputStreamWriter是字符流通向字節(jié)流的橋梁:把將要寫(xiě)入的字符型數(shù)據(jù)編碼為字節(jié)型數(shù)據(jù)。其中:在從字節(jié)流轉(zhuǎn)化為字符流時(shí),其實(shí)質(zhì)是將字節(jié)數(shù)組(bytebytes[]轉(zhuǎn)化為字符串String.publicString(bytebytes[],StringcharsetName);
在從字符流轉(zhuǎn)化為字節(jié)流時(shí),其實(shí)質(zhì)是將字符串String轉(zhuǎn)化為字節(jié)數(shù)組(bytebytes[].byte[]String.getBytes(StringcharsetName);8.1.2
io類(lèi)庫(kù)1、字節(jié)流的層次結(jié)構(gòu)
在java.io類(lèi)庫(kù)中,InputStream和OutputStream是處理字節(jié)數(shù)據(jù)的基本輸入輸出類(lèi),他們處在java.io包的最頂層。這兩類(lèi)均為抽象類(lèi),也就是說(shuō)他們不能被實(shí)例化,必須生成子類(lèi)之后才能實(shí)現(xiàn)一定的功能。8.1.2
io類(lèi)庫(kù)2、字符流的層次結(jié)構(gòu)8.1.2
io類(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中文件是計(jì)算機(jī)中一種基本的數(shù)據(jù)存儲(chǔ)形式,在實(shí)際存儲(chǔ)數(shù)據(jù)時(shí),如果對(duì)于數(shù)據(jù)的讀寫(xiě)速度要求不是很高,存儲(chǔ)的數(shù)據(jù)量不是很大時(shí),使用文件作為一種持久數(shù)據(jù)存儲(chǔ)的方式是比較好的選擇。存儲(chǔ)在文件內(nèi)部的數(shù)據(jù)和內(nèi)存中的數(shù)據(jù)不同,存儲(chǔ)在文件中的數(shù)據(jù)是一種“持久存儲(chǔ)”,也就是當(dāng)程序退出或計(jì)算機(jī)關(guān)機(jī)以后,數(shù)據(jù)還是存在的,而內(nèi)存內(nèi)部的數(shù)據(jù)在程序退出或計(jì)算機(jī)關(guān)機(jī)以后,數(shù)據(jù)就丟失了。File類(lèi)不是InputStream,OutputStream或Reader,Writer的子類(lèi),因?yàn)樗回?fù)責(zé)數(shù)據(jù)的輸入輸出,而是專(zhuān)門(mén)用來(lái)管理磁盤(pán)文件與目錄的。8.2.1文件與目錄管理1、創(chuàng)建File類(lèi)文件對(duì)象
(1)所有對(duì)文件的操作都要使用File類(lèi).(2)其構(gòu)造:
File(“文件名”);File(“文件所在目錄”,“文件名”);文件與應(yīng)用程序不在同一目錄文件與應(yīng)用程序在同一目錄Filef1=newFile(“C:\myProgram\jtest”);Strings=“myProgram\jtest”;Filef2=newFile(S);Filef3=newFile(“testfile.dat”);Filef4=newFile(“\docs”,“file.dat”);8.2.1文件與目錄管理2、獲取文件及目錄屬性(1)判斷文件或目錄是否存在
publicbooleanexists();(2)判斷是文件還是目錄
publicbooleanisFile();
publicbooleanisDirectory();(3)獲取文件或目錄名稱與路徑
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);intread();每次只能從輸入流中讀取一個(gè)字節(jié)的數(shù)據(jù)。該方法返回的是一個(gè)0~255之間的一個(gè)整數(shù)值,若為文本類(lèi)型的數(shù)據(jù)返回的是ASCII值。若該方法到達(dá)輸入流的末尾,則返回值為-1
。intread(byteb[]);intread(byteb[],intoff,intlen);以字節(jié)型數(shù)組作為參數(shù),一次可以讀取多個(gè)字節(jié),讀入的字節(jié)數(shù)據(jù)直接放入字節(jié)數(shù)組b中,并返回實(shí)際讀取的字節(jié)個(gè)數(shù)。需要注意的是:read方法是阻塞方法,也就是如果流對(duì)象中無(wú)數(shù)據(jù)可以讀取時(shí),則read方法會(huì)阻止程序繼續(xù)向下運(yùn)行,一直到有數(shù)據(jù)可以讀取為止。intread(byteb[])的作用是讀取當(dāng)前流對(duì)象中的數(shù)據(jù),并將讀取到的數(shù)據(jù)依次存儲(chǔ)到數(shù)組b(b需要提前初始化完成)中,也就是把當(dāng)前流中的第一個(gè)字節(jié)的數(shù)據(jù)存儲(chǔ)到b[0],第二個(gè)字節(jié)的數(shù)據(jù)存儲(chǔ)到b[1],依次類(lèi)推。流中已經(jīng)讀取過(guò)的數(shù)據(jù)也會(huì)被刪除,后續(xù)的數(shù)據(jù)會(huì)變成流中的第一個(gè)字節(jié)?!纠?-1】在下面的程序中,讀取一個(gè)文本文件test.dat,并將其顯示到對(duì)話框上。
在編寫(xiě)程序之前,我們至少需要知道兩件事:(1)怎樣把一個(gè)流與一個(gè)文件聯(lián)系起來(lái);(2)用什么方法把從文件中讀取到的數(shù)據(jù)顯示到一個(gè)對(duì)話框中。*讀取文件*/importjava.io.*;importjavax.swing.*;classExample8_1{publicstaticvoidmain(Stringargs[]){bytebuffer[]=newbyte[2056];Stringstr; try{ Filefile=newFile("d:/jtest/test.dat"); FileInputStreamfileInput=newFileInputStream(file);intbytes=fileInput.read(buffer);
str=newString(buffer,0,bytes);}catch(Exceptione) { str=e.toString(); } JOptionPane.showMessageDialog(null,str);System.exit(0);//退出程序
}}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);write(int
b):將指定字節(jié)寫(xiě)入此文件輸出流write(byte[]
b):將b.length個(gè)字節(jié)從指定字節(jié)數(shù)寫(xiě)入此文件輸出流中【例8-2】復(fù)制圖像文件a.jpg,并且更名為b.jpg。*讀寫(xiě)圖像文件*/importjavax.swing.JOptionPane;importjava.io.*;classFileRW{intbytes;bytebuffer[]=newbyte[65560];FileInputStreamfileInput;FileOutputStreamfileOutput;FileRW() {takeimg(); loadimg();JOptionPane.showMessageDialog(null,"文件復(fù)制并更名成功!\n文件大小為:"+bytes);System.exit(0);//退出程序
}//讀取圖像文件a.jpgpublicvoidtakeimg() { try{ Filefile=newFile("a.jpg"); fileInput=newFileInputStream(file);bytes=fileInput.read(buffer,0,65560);}catch(IOExceptionei){System.out.println(ei);}}//寫(xiě)入到b.jpgpublicvoidloadimg() { try{ fileOutput=newFileOutputStream("b.jpg");fileOutput.write(buffer,0,bytes); }catch(IOExceptioneo){System.out.println(eo);} }}publicclassExample8_2{publicstaticvoidmain(String[]args) {newFileRW(); }}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。/*文件的讀取和寫(xiě)入*/importjava.io.*;importjava.awt.*;importjava.awt.event.*;importjavax.swing.*;classWinextendsJFrameimplementsActionListener{FileReaderr_file;FileWriterw_file;BufferedReaderbuf_reader;BufferedWriterbuf_writer;JTextAreatxt;JButtonbtn1,btn2;JPanelp;Win(){setSize(200,200);setVisible(true);txt=newJTextArea(10,10);btn1=newJButton("Read");btn2=newJButton("Write");btn1.addActionListener(this);btn2.addActionListener(this);p=newJPanel();add(txt,"Center");add(p,"South");p.setLayout(newFlowLayout());p.add(btn1);p.add(btn2);validate();setDefaultCloseOperation(EXIT_ON_CLOSE);}publicvoidactionPerformed(ActionEvente){if(e.getSource()==btn1){readFile();}if(e.getSource()==btn2){writeFile();}}//讀取文件publicvoidreadFile(){Strings; try{ Filef=newFile("D:/jtest/","Test.txt"); r_file=newFileReader(f);buf_reader=newBufferedReader(r_file); }catch(IOExceptionef){System.out.println(ef);} try{ while((s=buf_reader.readLine())!=null) {txt.append(s+'\n');}}catch(IOExceptioner){System.out.println(er);}}publicvoidwriteFile(){ try{w_file=newFileWriter("D:/jtest/Test.txt");buf_writer=newBufferedWriter(w_file);Stringstr=txt.getText();buf_writer.write(str,0,str.length());buf_writer.flush(); }catch(IOExceptionew){System.out.println(ew);}}}publicclassExample8_3{ publicstaticvoidmain(String[]args) { Winw=newWin(); }}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.
}
見(jiàn)書(shū)上234頁(yè)表8.3隨機(jī)存取文件流的常用方法。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ù)。常用方法見(jiàn)表8.4
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ě)入該文件。【例8-9】應(yīng)用DataInputStream類(lèi)和DataOutputStream類(lèi)復(fù)制聲音文件。
importjavax.swing.JOptionPane;importjava.io.*;import
java.util.*;classFileRW{intbytes,f_length;bytebuffer[];FileInputStreamfileInput;FileOutputStreamfileOutput;DataInputStreamdataInput;DataOutputStreamdataOutput;FileRW(){Filefile=newFile("E:"+File.separator+"gongsl2008"+File.separator+"03_布局管理器_1.avi");f_length=(int)file.length();buffer=new
byte[f_length];taking();loading();JOptionPane.showMessageDialog(null,"文件復(fù)制成功!\n文件大小為:"+f_length);System.exit(0);}public
voidtaking(){try{fileInput=newFileInputStream(“f:"+File.separator+"gongsl2008"+File.separator+"Kalimba.mp3");dataInput=newDataInputStream(fileInput);bytes=dataInput.read(buffer);}catch(IOExceptionei){ei.printStackTrace();}try{dataInput.close();}catch(IOExceptionei){ei.printStackTrace();}}public
voidloading(){try{fileOutput=newFileOutputStream(“f:"+File.separator+"gongsl2008"+File.separator+"Kalimba.mp3");dataOutput=newDataOutputStream(fileOutput);dataOutput.write(bu
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年主持人聘合同(2篇)
- 2025年九年級(jí)語(yǔ)文教學(xué)年終總結(jié)(2篇)
- 2025年云南省鮮花訂購(gòu)合同(三篇)
- 2025年二年級(jí)語(yǔ)文教學(xué)工作心得體會(huì)模版(3篇)
- 書(shū)店裝修小型合同樣本
- 醫(yī)療設(shè)施土方清運(yùn)合同
- 清真寺裝修合同樣本
- 金華日式屋頂花園施工方案
- 度假別墅裝修合同協(xié)議
- 醫(yī)療藥品冷鏈運(yùn)輸協(xié)議
- 自動(dòng)化設(shè)備項(xiàng)目評(píng)估報(bào)告模板范文
- 新課程關(guān)鍵詞
- 消防設(shè)施操作員報(bào)名承諾書(shū)
- 東華醫(yī)院麻醉科QoR-40隨訪表
- DB5106∕T 16-2021 機(jī)插水稻育秧基質(zhì)制備技術(shù)規(guī)程
- 常用鋼材化學(xué)成分及力學(xué)性能
- CPIM BSCM__v3_0_VC(課堂PPT)
- 雀巢面試的開(kāi)放性問(wèn)題
- 會(huì)議審批表模板
- 空調(diào)線路安裝施工方案與技術(shù)措施
- 中藥飲片車(chē)間的GMP改造設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論