![面向?qū)ο蟪绦蛟O(shè)計第20講 Java的輸入與輸出流(上)_第1頁](http://file4.renrendoc.com/view12/M0A/0C/3C/wKhkGWa8qZ6AcZNBAAEWUHAB4ig236.jpg)
![面向?qū)ο蟪绦蛟O(shè)計第20講 Java的輸入與輸出流(上)_第2頁](http://file4.renrendoc.com/view12/M0A/0C/3C/wKhkGWa8qZ6AcZNBAAEWUHAB4ig2362.jpg)
![面向?qū)ο蟪绦蛟O(shè)計第20講 Java的輸入與輸出流(上)_第3頁](http://file4.renrendoc.com/view12/M0A/0C/3C/wKhkGWa8qZ6AcZNBAAEWUHAB4ig2363.jpg)
![面向?qū)ο蟪绦蛟O(shè)計第20講 Java的輸入與輸出流(上)_第4頁](http://file4.renrendoc.com/view12/M0A/0C/3C/wKhkGWa8qZ6AcZNBAAEWUHAB4ig2364.jpg)
![面向?qū)ο蟪绦蛟O(shè)計第20講 Java的輸入與輸出流(上)_第5頁](http://file4.renrendoc.com/view12/M0A/0C/3C/wKhkGWa8qZ6AcZNBAAEWUHAB4ig2365.jpg)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第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)建文件輸入流對象……");
FileInputStream
fis=newFileInputStream("input.txt");
System.out.println("指定輸入文件對象……");bytedata[]=newbyte[100];
System.out.println("讀入文件數(shù)據(jù)到指定數(shù)組中……");
fis.read(data);Stringstr=data.toString();
System.out.println("創(chuàng)建文件輸出流對象……");
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){}}}本實例中主要應(yīng)用Java的輸入輸出流實現(xiàn)文件的復(fù)制。概述源
輸入流輸入流從源中讀出數(shù)據(jù)目的地輸出流
輸出流向目的地中寫入數(shù)據(jù)在JavaAPI中,I/O包提供了大量的流類來實現(xiàn)數(shù)據(jù)的輸入和輸出,主要分為兩類:一種是字節(jié)流,另一種是字符流,分別由四個抽象類來表示:InputStream、OutputStream、Reader和Writer.所有輸入流類都是InputStream類或者Reader類的子類,它們都繼承了read()方法用于讀取數(shù)據(jù)。而所有輸出流類都是OutputStream類或者Writer類的子類,它們都繼承了write()方法用于寫入數(shù)據(jù)。InputStream/OutputStream和Reader/Writer都直接繼承自Java的根類Object,它們各自形成一個獨(dú)立的繼承體系。
字節(jié)流字節(jié)流用來讀寫8位的數(shù)據(jù)。由于在讀寫中不會對數(shù)據(jù)作任何轉(zhuǎn)換,所以可以用來直接處理二進(jìn)制的數(shù)據(jù)。字節(jié)流分為輸入流InputStream和輸出流OutputStream,所有其他的字節(jié)流都是它們的子類。
字節(jié)輸入流InputStream成員方法主要功能publicabstractintread()throwsIOException自輸入流中讀取一個字節(jié)publicintread(byteb[])throwsIOException將輸入的數(shù)據(jù)存放在指定的字節(jié)數(shù)組publicintread(byteb[],intoffset,intlen)throwsIOException自輸入流中的offset位置開始讀取len個字節(jié)并存放在指定的數(shù)組b中publicvoidreset()throwsIOException將讀取位置移至輸入流標(biāo)記之處publiclongskip(longn)throwsIOException從輸入流中跳過n個字節(jié)publicintavailable()throwsIOException返回輸入流中的可用字節(jié)個數(shù)publicvoidmark(intreadlimit)在輸入流當(dāng)前位置加上標(biāo)記publicbooleanmarkSupported()測試輸入流是否支持標(biāo)記(mark)用的所有資源publicvoidclose()throwsIOException關(guān)閉輸入流,
并釋放占用的所有資源字節(jié)輸出流OutputStream類成員方法主要功能publicabstractvoidwrite(intb)throwsIOException寫一個字節(jié)publicvoidwrite(byteb[])throwsIOException寫一個字節(jié)數(shù)組publicvoidwrite(byteb[],int
offset,int
len)throwsIOException將字節(jié)數(shù)組b中從offset位置開始的、長度為len個字節(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;
它是一個標(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編程實現(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類都是抽象類,不能實例化,因此在實際應(yīng)用中并不使用這兩個類,而是使用一些基本數(shù)據(jù)流類,如FileInputStream和FileOutputStream,它們分別是InputStream類和OutputStream類的子類,用于進(jìn)行文件輸入和輸出的處理,其數(shù)據(jù)源和目標(biāo)都是文件。FileInputStream用于順序訪問本地文件。它從超類InputStream中繼承了read、close等方法對本機(jī)上的文件進(jìn)行操作,但不支持mark方法和reset方法。
FileInputStream類構(gòu)造方法FileInputStream類主要有三個構(gòu)造方法:FileInputStream(Stringname)FileInputStream(Filefile)FileInputStream(FileDescriptor
fd)第一個構(gòu)造方法使用給定的文件名name創(chuàng)建一個FileInputStream對象,用來打開一個到達(dá)該文件的輸入流,這個文件就是源。第二個構(gòu)造方法使用File對象FileInputStream對象,用來指定要打開哪個文件。FileDescriptor也是java.io包中的類,主要用于關(guān)聯(lián)到已打開的文件,或已打開的網(wǎng)絡(luò)鏈接,或者其他I/O連接,在機(jī)器底層發(fā)揮作用,可以強(qiáng)制系統(tǒng)緩沖區(qū)與底層設(shè)備保持同步,從而為輸入輸出流提供一個與底層設(shè)備同步的系統(tǒng)緩沖區(qū),但是這個類不大常用,大家只要了解就可以了。FileInputStream類讀取字節(jié)的方法在創(chuàng)建文件輸入流對象之后,可以調(diào)用read方法從流中讀取字節(jié),read方法有三種格式:publicintread()throwsIOExceptionpublicintread(byte[]b,int
off,int
len)throwsIOException
publicintread(byte[]b)throwsIOExceptionread()方法將返回一個整數(shù),它包含了流中的下一個字節(jié)。如果返回的是-1,則表示到達(dá)了文件輸入流的末尾。這種方法每次只能從文件輸入流中讀取一個字節(jié),為了能從流中讀入多個數(shù)據(jù)字節(jié),可以調(diào)用read(byteb[],int
off,int
len)方法,該方法從輸入流當(dāng)前字節(jié)處起讀取長度為len字節(jié)的數(shù)據(jù),從位置off處起存入數(shù)組b中,b中位置在off之前和在off+len之后的數(shù)據(jù)將保持不變,返回讀取的數(shù)據(jù)長度,并將第len個字節(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類時要注意:若關(guān)聯(lián)的目錄或者文件不存在,Java就會拋出一個IOException異常。程序可以使用try-catch塊檢測和處理捕捉到的異常。例如,為了把一個文件輸入流對象與一個文件關(guān)聯(lián)起來,可以使用下列的代碼段來處理Java產(chǎn)生的IOEception異常。關(guān)閉輸入流
publicvoidclose()
throwsIOException
雖然Java在程序結(jié)束時會自動關(guān)閉所有打開的流,但還是建議大家養(yǎng)成一個良好的習(xí)慣,在使用完流后,調(diào)用close()方法顯式地關(guān)閉任何打開的流,以防止一個被打開的流用完系統(tǒng)資源。文件字節(jié)輸出流類FileOutputStreamFileOutputStream類用于向一個文本文件寫數(shù)據(jù),它從其超類OutputStream中繼承了write、close等方法。
構(gòu)造方法publicFileOutputStream(Stringname)throwsFileNotFoundExceptionpublicFileOutputStream(Filefile)throwsFileNotFoundExceptionpublicFileOutputStream(String
name,booleanappend)throwsFileNotFoundExceptionappend表示文件是否為添加的寫入方式。當(dāng)append值false時,為重寫方式,即從頭寫入;當(dāng)append值為true時,為添加方式,即從尾寫入。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方法可以向文件寫入一個字節(jié)、一個字節(jié)數(shù)組或一個字節(jié)數(shù)組的一部分。當(dāng)b是int類型時,b占用4個字節(jié)32位,通常是把b的低8位寫入輸出流,忽略其余高24位。當(dāng)b是字節(jié)數(shù)組時,可以寫入從off位置開始的len個字節(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錯或文件關(guān)閉時,拋出IOException異常。如果off或len為負(fù)數(shù)或off+len大于數(shù)組b的長度length,則拋出IndexOutOfBoundsException異常;如果b是空數(shù)組,則拋出NullPointerException異常。用FileOutputStream對象寫入時,如果文件不存在,則會創(chuàng)建一個新文件,如果文件已存在,使用重寫方式
則會覆蓋原有數(shù)據(jù)。
例11.4
編寫程序,應(yīng)用FileInputStream類實現(xiàn)從"c:\file.dat"中讀出第5個字節(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òu)造方法:
publicByteArrayInputStream(byteb[])publicByteArrayInputStream(byte
b[],int
off,int
len)第一個構(gòu)造方法以一個字節(jié)數(shù)組作為參數(shù),數(shù)據(jù)源完全復(fù)制到內(nèi)部緩沖區(qū)。第二個構(gòu)造方法的參數(shù)包括一個字節(jié)數(shù)組、一個整型偏移量和一個整型長度,與第一個構(gòu)造方法不同的是,此構(gòu)造方法生成的內(nèi)部緩沖區(qū)將以指定偏移量位置為起始位置,并且能讀取的最大數(shù)據(jù)長度為指定的長度。這個字節(jié)數(shù)組就是該輸入流的數(shù)據(jù)源。內(nèi)存緩沖區(qū)保持一個標(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對應(yīng),ByteArrayOutputStream
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025版女方離婚上訴狀:離婚后財產(chǎn)分割與子女撫養(yǎng)費(fèi)用分擔(dān)合同-@-1
- 二零二五年度高校師資力量引進(jìn)與合作培訓(xùn)合同4篇
- 2025-2030全球托盤裝填機(jī)行業(yè)調(diào)研及趨勢分析報告
- 2025年全球及中國米飯生產(chǎn)線行業(yè)頭部企業(yè)市場占有率及排名調(diào)研報告
- 二零二五年度天津房地產(chǎn)項目營銷策劃合同范本
- 二零二五年度綠色環(huán)保材料應(yīng)用裝修工程合同2篇
- 鋼鐵貿(mào)易居間介紹合同范本
- 影視劇本改編與創(chuàng)作版權(quán)合同協(xié)議
- 環(huán)保能源行業(yè)太陽能設(shè)備安裝合同
- 體育用品采購合同
- 湖北金獅礦業(yè)股份有限公司南漳縣獅子巖鋁土礦區(qū)猴子巖礦段礦產(chǎn)資源開發(fā)利用與生態(tài)復(fù)綠方案
- 遼寧營口面向2024大學(xué)生退役士兵??紝U校?5人)高頻考題難、易錯點模擬試題(共500題)附帶答案詳解
- 黑枸杞生物原液應(yīng)用及產(chǎn)業(yè)化項目可行性研究報告
- 2024年河北廊坊市三河市金創(chuàng)產(chǎn)業(yè)投資有限公司招聘筆試參考題庫含答案解析
- TZSA 158-2023 雙引擎分布式視頻處理器技術(shù)規(guī)范
- 律師辦理刑事案件基本流程及風(fēng)險防范課件
- TQGCML 2624-2023 母嬰級空氣凈化器 潔凈空氣和凈化等級技術(shù)要求
- 睡眠障礙護(hù)理查房課件
- 金融工程.鄭振龍(全套課件560P)
- 六年級語文下冊閱讀及參考答案(12篇)
- 蘇教版(蘇少版)九年級美術(shù)下冊全冊課件
評論
0/150
提交評論