版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第20講Java的輸入與輸出流(上)/教學(xué)目標(biāo)理解Java中流的概念掌握字節(jié)流InputStream和OutputStream及其子類的使用掌握字符流Reader和Writer及其子類的使用掌握隨機(jī)讀寫文件流RandomAccessFile的使用
引例importjava.io.*;publicclassEx11_1{publicstaticvoidmain(Stringargs[]){try{
System.out.println("創(chuàng)建文件輸入流對(duì)象……");
FileInputStream
fis=newFileInputStream("input.txt");
System.out.println("指定輸入文件對(duì)象……");bytedata[]=newbyte[100];
System.out.println("讀入文件數(shù)據(jù)到指定數(shù)組中……");
fis.read(data);Stringstr=data.toString();
System.out.println("創(chuàng)建文件輸出流對(duì)象……");
FileOutputStream
fos=newFileOutputStream("output.txt");
System.out.println("將指定數(shù)組的內(nèi)容讀入文件中……");
fos.write(str.getBytes());
System.out.println("關(guān)閉所有文件");
fis.close(); fos.close();}catch(Exceptione){}}}本實(shí)例中主要應(yīng)用Java的輸入輸出流實(shí)現(xiàn)文件的復(fù)制。概述源
輸入流輸入流從源中讀出數(shù)據(jù)目的地輸出流
輸出流向目的地中寫入數(shù)據(jù)在JavaAPI中,I/O包提供了大量的流類來實(shí)現(xiàn)數(shù)據(jù)的輸入和輸出,主要分為兩類:一種是字節(jié)流,另一種是字符流,分別由四個(gè)抽象類來表示:InputStream、OutputStream、Reader和Writer.所有輸入流類都是InputStream類或者Reader類的子類,它們都繼承了read()方法用于讀取數(shù)據(jù)。而所有輸出流類都是OutputStream類或者Writer類的子類,它們都繼承了write()方法用于寫入數(shù)據(jù)。InputStream/OutputStream和Reader/Writer都直接繼承自Java的根類Object,它們各自形成一個(gè)獨(dú)立的繼承體系。
字節(jié)流字節(jié)流用來讀寫8位的數(shù)據(jù)。由于在讀寫中不會(huì)對(duì)數(shù)據(jù)作任何轉(zhuǎn)換,所以可以用來直接處理二進(jìn)制的數(shù)據(jù)。字節(jié)流分為輸入流InputStream和輸出流OutputStream,所有其他的字節(jié)流都是它們的子類。
字節(jié)輸入流InputStream成員方法主要功能publicabstractintread()throwsIOException自輸入流中讀取一個(gè)字節(jié)publicintread(byteb[])throwsIOException將輸入的數(shù)據(jù)存放在指定的字節(jié)數(shù)組publicintread(byteb[],intoffset,intlen)throwsIOException自輸入流中的offset位置開始讀取len個(gè)字節(jié)并存放在指定的數(shù)組b中publicvoidreset()throwsIOException將讀取位置移至輸入流標(biāo)記之處publiclongskip(longn)throwsIOException從輸入流中跳過n個(gè)字節(jié)publicintavailable()throwsIOException返回輸入流中的可用字節(jié)個(gè)數(shù)publicvoidmark(intreadlimit)在輸入流當(dāng)前位置加上標(biāo)記publicbooleanmarkSupported()測(cè)試輸入流是否支持標(biāo)記(mark)用的所有資源publicvoidclose()throwsIOException關(guān)閉輸入流,
并釋放占用的所有資源字節(jié)輸出流OutputStream類成員方法主要功能publicabstractvoidwrite(intb)throwsIOException寫一個(gè)字節(jié)publicvoidwrite(byteb[])throwsIOException寫一個(gè)字節(jié)數(shù)組publicvoidwrite(byteb[],int
offset,int
len)throwsIOException將字節(jié)數(shù)組b中從offset位置開始的、長(zhǎng)度為len個(gè)字節(jié)的數(shù)據(jù)寫到輸出流中publicvoidflush()throwsIOException寫緩沖區(qū)內(nèi)的所有數(shù)據(jù)publicvoidclose()throwsIOException關(guān)閉輸出流,并釋放占用的所有資源標(biāo)準(zhǔn)輸入流標(biāo)準(zhǔn)輸入:InputStreamis=System.in;
它是一個(gè)標(biāo)準(zhǔn)輸入流,一般接收鍵盤的響應(yīng),得到鍵盤所傳遞來的信息。例11.2下面程序可以從鍵盤輸入字符到程序中,并在屏幕上重新打印出來。importjava.io.*;classEx11_2{publicstaticvoidmain(Stringargs[])throwsIOException{
bytebuf[]=newbyte[255];
System.out.println("enter:");
System.in.read(buf,0,255);
System.out.println("Got:");
Stringstr=newString(buf);
System.out.println(str);
}}例11.3編程實(shí)現(xiàn)從鍵盤讀入若干字符,然后顯示出來。importjava.io.*;publicclassEx11_3{publicstaticvoidmain(Stringargs[])throwsIOException{
intb;while((b=System.in.read())!=-1){
System.out.print((char)b);}
System.out.println();}}文件字節(jié)輸入流類FileInputStreamInputStream類和OutputStream類都是抽象類,不能實(shí)例化,因此在實(shí)際應(yīng)用中并不使用這兩個(gè)類,而是使用一些基本數(shù)據(jù)流類,如FileInputStream和FileOutputStream,它們分別是InputStream類和OutputStream類的子類,用于進(jìn)行文件輸入和輸出的處理,其數(shù)據(jù)源和目標(biāo)都是文件。FileInputStream用于順序訪問本地文件。它從超類InputStream中繼承了read、close等方法對(duì)本機(jī)上的文件進(jìn)行操作,但不支持mark方法和reset方法。
FileInputStream類構(gòu)造方法FileInputStream類主要有三個(gè)構(gòu)造方法:FileInputStream(Stringname)FileInputStream(Filefile)FileInputStream(FileDescriptor
fd)第一個(gè)構(gòu)造方法使用給定的文件名name創(chuàng)建一個(gè)FileInputStream對(duì)象,用來打開一個(gè)到達(dá)該文件的輸入流,這個(gè)文件就是源。第二個(gè)構(gòu)造方法使用File對(duì)象FileInputStream對(duì)象,用來指定要打開哪個(gè)文件。FileDescriptor也是java.io包中的類,主要用于關(guān)聯(lián)到已打開的文件,或已打開的網(wǎng)絡(luò)鏈接,或者其他I/O連接,在機(jī)器底層發(fā)揮作用,可以強(qiáng)制系統(tǒng)緩沖區(qū)與底層設(shè)備保持同步,從而為輸入輸出流提供一個(gè)與底層設(shè)備同步的系統(tǒng)緩沖區(qū),但是這個(gè)類不大常用,大家只要了解就可以了。FileInputStream類讀取字節(jié)的方法在創(chuàng)建文件輸入流對(duì)象之后,可以調(diào)用read方法從流中讀取字節(jié),read方法有三種格式:publicintread()throwsIOExceptionpublicintread(byte[]b,int
off,int
len)throwsIOException
publicintread(byte[]b)throwsIOExceptionread()方法將返回一個(gè)整數(shù),它包含了流中的下一個(gè)字節(jié)。如果返回的是-1,則表示到達(dá)了文件輸入流的末尾。這種方法每次只能從文件輸入流中讀取一個(gè)字節(jié),為了能從流中讀入多個(gè)數(shù)據(jù)字節(jié),可以調(diào)用read(byteb[],int
off,int
len)方法,該方法從輸入流當(dāng)前字節(jié)處起讀取長(zhǎng)度為len字節(jié)的數(shù)據(jù),從位置off處起存入數(shù)組b中,b中位置在off之前和在off+len之后的數(shù)據(jù)將保持不變,返回讀取的數(shù)據(jù)長(zhǎng)度,并將第len個(gè)字節(jié)設(shè)為當(dāng)前字節(jié)。
Stringstr="";FileInputStreamfin=newFileInputStream("c:\\Ex11_3.java");for(inti=fin.read();i!=-1;i=fin.read())
str+=(char)i;上述程序段的功能是應(yīng)用read()方法將c:\Ex11_3.java的內(nèi)容輸出到字符串str中。
try{
FileInputStream
fis=newFileInputStream("java7.txt");......}catch(IOExceptione){
System.out.println("FileException:"+e);}FileInputStream舉例在使用FileInputStream類時(shí)要注意:若關(guān)聯(lián)的目錄或者文件不存在,Java就會(huì)拋出一個(gè)IOException異常。程序可以使用try-catch塊檢測(cè)和處理捕捉到的異常。例如,為了把一個(gè)文件輸入流對(duì)象與一個(gè)文件關(guān)聯(lián)起來,可以使用下列的代碼段來處理Java產(chǎn)生的IOEception異常。關(guān)閉輸入流
publicvoidclose()
throwsIOException
雖然Java在程序結(jié)束時(shí)會(huì)自動(dòng)關(guān)閉所有打開的流,但還是建議大家養(yǎng)成一個(gè)良好的習(xí)慣,在使用完流后,調(diào)用close()方法顯式地關(guān)閉任何打開的流,以防止一個(gè)被打開的流用完系統(tǒng)資源。文件字節(jié)輸出流類FileOutputStreamFileOutputStream類用于向一個(gè)文本文件寫數(shù)據(jù),它從其超類OutputStream中繼承了write、close等方法。
構(gòu)造方法publicFileOutputStream(Stringname)throwsFileNotFoundExceptionpublicFileOutputStream(Filefile)throwsFileNotFoundExceptionpublicFileOutputStream(String
name,booleanappend)throwsFileNotFoundExceptionappend表示文件是否為添加的寫入方式。當(dāng)append值false時(shí),為重寫方式,即從頭寫入;當(dāng)append值為true時(shí),為添加方式,即從尾寫入。append默認(rèn)值為false。例如:
FileOutputStream
fos=newFileOutputStream("OutputFile.txt",true);FileOutputStream類寫入字節(jié)的方法使用write方法將指定的字節(jié)寫入文件輸出流。Write方法有3種格式:publicvoidwrite(intb)throwsIOExceptionpublicvoidwrite(byte[]b)throwsIOExceptionpublicvoidwrite(byte[]b,int
off,int
len)throwsIOExceptionwrite方法可以向文件寫入一個(gè)字節(jié)、一個(gè)字節(jié)數(shù)組或一個(gè)字節(jié)數(shù)組的一部分。當(dāng)b是int類型時(shí),b占用4個(gè)字節(jié)32位,通常是把b的低8位寫入輸出流,忽略其余高24位。當(dāng)b是字節(jié)數(shù)組時(shí),可以寫入從off位置開始的len個(gè)字節(jié),如果沒有off和len參數(shù),則寫入所有字節(jié),相當(dāng)于write(b,0,b.length)。關(guān)閉輸出流publicvoidclose()
throwsIOExceptionclose方法關(guān)閉輸出流,并釋放相關(guān)的系統(tǒng)資源。發(fā)生I/O錯(cuò)或文件關(guān)閉時(shí),拋出IOException異常。如果off或len為負(fù)數(shù)或off+len大于數(shù)組b的長(zhǎng)度length,則拋出IndexOutOfBoundsException異常;如果b是空數(shù)組,則拋出NullPointerException異常。用FileOutputStream對(duì)象寫入時(shí),如果文件不存在,則會(huì)創(chuàng)建一個(gè)新文件,如果文件已存在,使用重寫方式
則會(huì)覆蓋原有數(shù)據(jù)。
例11.4
編寫程序,應(yīng)用FileInputStream類實(shí)現(xiàn)從"c:\file.dat"中讀出第5個(gè)字節(jié)到變量c中,并輸出。
importjava.io.*;publicclassEx11_4{publicstaticvoidmain(Stringargs[]){try{
FileInputStream
fis=newFileInputStream("c:\\file.dat");fis.skip(4);
intc=fis.read();
System.out.println((char)c);
fis.close();}catch(Exceptione){
e.printStackTrace();}} }內(nèi)存的讀寫在java.io中,還提供了ByteArrayInputStream和ByteArrayOutputStream類來直接訪問內(nèi)存,它們分別是InputStream和OutputStream的子類。類ByteArrayInputStream有兩個(gè)構(gòu)造方法:
publicByteArrayInputStream(byteb[])publicByteArrayInputStream(byte
b[],int
off,int
len)第一個(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é)。ByteArrayInputStream類ByteArrayInputStream可從字節(jié)數(shù)組中讀取數(shù)據(jù),它重寫了其父類InputStream的部分方法,如:publicintread();publicintread(byteb[],int
off,int
len);publiclongskip(longn)publicintavailable();publicboolean
markSupported();publicvoidmark(inttag);publicvoidreset();publicvoidclose()throwsIOExceptionByteArrayOutputStream
類與ByteArrayInputStream對(duì)應(yīng),ByteArrayOutputStream
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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年度扶貧資金管理及使用專項(xiàng)合同3篇
- 2025年度智能廣告創(chuàng)意制作與推廣服務(wù)合同4篇
- 2024鋪位出租合同-親子樂園鋪位租賃管理協(xié)議3篇
- 2025年度石材加工與大理石施工一體化工程合同4篇
- 2025年度土地整治與修復(fù)項(xiàng)目租賃合同4篇
- 2025年度智能生產(chǎn)線承包運(yùn)營(yíng)服務(wù)合同4篇
- 2024版貨車租賃合規(guī)性及責(zé)任明確合同版B版
- 2025年度水電安裝工程智能化施工技術(shù)與保修服務(wù)合同3篇
- 2025年度智能物流配套廠房建設(shè)合同范本4篇
- 2025年度智能家居瓷磚批發(fā)代理銷售合同3篇
- 使用錯(cuò)誤評(píng)估報(bào)告(可用性工程)模版
- 公司章程(二個(gè)股東模板)
- GB/T 19889.7-2005聲學(xué)建筑和建筑構(gòu)件隔聲測(cè)量第7部分:樓板撞擊聲隔聲的現(xiàn)場(chǎng)測(cè)量
- 世界奧林匹克數(shù)學(xué)競(jìng)賽6年級(jí)試題
- 藥用植物學(xué)-課件
- 文化差異與跨文化交際課件(完整版)
- 國(guó)貨彩瞳美妝化消費(fèi)趨勢(shì)洞察報(bào)告
- 云南省就業(yè)創(chuàng)業(yè)失業(yè)登記申請(qǐng)表
- UL_標(biāo)準(zhǔn)(1026)家用電器中文版本
- 國(guó)網(wǎng)三個(gè)項(xiàng)目部標(biāo)準(zhǔn)化手冊(cè)(課堂PPT)
- 快速了解陌生行業(yè)的方法論及示例PPT課件
評(píng)論
0/150
提交評(píng)論