付費(fèi)下載
下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
JAVA應(yīng)用開發(fā)詳解第12章:JAVAIO ——字節(jié)流與字符流MLDN軟件教學(xué)研發(fā)部本章目標(biāo)掌握流的概念掌握字節(jié)流與字符流的作用掌握文件的標(biāo)準(zhǔn)操作步驟掌握字節(jié)與字符操作的區(qū)別流在程序中所有的數(shù)據(jù)都是以流的方式進(jìn)行傳輸或保存的,程序需要數(shù)據(jù)的時(shí)候要使用輸入流讀取數(shù)據(jù),而當(dāng)程序需要將一些數(shù)據(jù)保存起來的時(shí)候,就要使用輸出流完成。字節(jié)流與字符流在java.io包中操作文件內(nèi)容的主要有兩大類:字節(jié)流、字符流,兩類都分為輸入和輸出操作。在字節(jié)流中輸出數(shù)據(jù)主要是使用OutputStream完成,輸入使的是InputStream,在字符流中輸出主要是使用Writer類完成,輸入主要是使用Reader類完成。操作流程在JAVA中IO操作也是有相應(yīng)步驟的,以文件操作為例,主要的操作流程如下:使用File類打開一個(gè)文件通過字節(jié)流或字符流的子類,指定輸出的位置進(jìn)行讀/寫操作關(guān)閉輸入/輸出字節(jié)流字節(jié)流主要是操作byte類型數(shù)據(jù),以byte數(shù)組為準(zhǔn),主要操作類就是OutputStream、InputStream。字節(jié)輸出流:OutputStream字節(jié)輸入流:InputStreamOutputStream類OutputStream是整個(gè)io包中字節(jié)輸出流的最大父類,此類的定義如下:publicabstractclassOutputStreamextendsObjectimplementsCloseable,Flushable從以上的定義中可以發(fā)現(xiàn),此類是一個(gè)抽象類,如果要想使用此類的話,則首先必須通過子類實(shí)例化對象,那么如果現(xiàn)在要操作的是一個(gè)文件,則可以使用:FileOutputStream類。通過向上轉(zhuǎn)型之后,可以為OutputStream實(shí)例化。OutputStream類的常用方法要想使用以上方法,必須使用子類實(shí)例化,此時(shí)使用FileOutputStream子類,此類的構(gòu)造方法如下:publicFileOutputStream(Filefile)throwsFileNotFoundExceptionNo.方法或常量類型描述1publicvoidclose()throwsIOException普通關(guān)閉輸出流2publicvoidflush()throwsIOException普通刷新緩沖區(qū)3publicvoidwrite(byte[]b)throwsIOException普通將一個(gè)byte數(shù)組寫入數(shù)據(jù)流4publicvoidwrite(byte[]b,intoff,intlen)throwsIOException普通將一個(gè)指定范圍的byte數(shù)組寫入數(shù)據(jù)流5publicabstractvoidwrite(intb)throwsIOException普通將一個(gè)字節(jié)數(shù)據(jù)寫入數(shù)據(jù)流向文件中寫入字符串packageorg.lxh.demo12.byteiodemo;importjava.io.File;importjava.io.FileOutputStream;importjava.io.OutputStream;public
classOutputStreamDemo01{
public
static
voidmain(String[]args)throwsException{//異常拋出,不處理
//第1步、使用File類找到一個(gè)文件
Filef=newFile("d:"+File.separator+"test.txt");//聲明File對象
//第2步:通過子類實(shí)例化父類對象
OutputStreamout=null; //準(zhǔn)備好一個(gè)輸出的對象
out=newFileOutputStream(f); //通過對象多態(tài)性,進(jìn)行實(shí)例化
//第3步:進(jìn)行寫操作
Stringstr="HelloWorld!!!"; //準(zhǔn)備一個(gè)字符串
byteb[]=str.getBytes();//只能輸出byte數(shù)組,所以將字符串變?yōu)閎yte數(shù)組
out.write(b); //將內(nèi)容輸出,保存文件
//第4步:關(guān)閉輸出流
out.close(); //關(guān)閉輸出流
}}使用write(intt)的方式寫入文件內(nèi)容packageorg.lxh.demo12.byteiodemo;importjava.io.File;importjava.io.FileOutputStream;importjava.io.OutputStream;public
classOutputStreamDemo02{
public
static
voidmain(String[]args)throwsException{//異常拋出,不處理
//第1步、使用File類找到一個(gè)文件
Filef=newFile("d:"+File.separator+"test.txt");//聲明File對象
//第2步:通過子類實(shí)例化父類對象
OutputStreamout=null; //準(zhǔn)備好一個(gè)輸出的對象
out=newFileOutputStream(f); //通過對象多態(tài)性,進(jìn)行實(shí)例化
//第3步:進(jìn)行寫操作
Stringstr="HelloWorld!!!"; //準(zhǔn)備一個(gè)字符串
byteb[]=str.getBytes();//只能輸出byte數(shù)組,所以將字符串變?yōu)閎yte數(shù)組
for(inti=0;i<b.length;i++){ out.write(b[i]); //將內(nèi)容輸出
}
//第4步:關(guān)閉輸出流
out.close(); //關(guān)閉輸出流
}}追加新內(nèi)容之前的所有操作中,如果重新執(zhí)行程序,則肯定會(huì)覆蓋文件中的已有內(nèi)容,那么此時(shí)可以通過FielOutputStream向文件中追加內(nèi)容,F(xiàn)ileOutputStream的另外一個(gè)構(gòu)造方法:publicFileOutputStream(Filefile,booleanappend)throwsFileNotFoundException在構(gòu)造方法中,如果將append的值設(shè)置為true,則表示在文件的末尾追加內(nèi)容。修改之前的程序,追加文件內(nèi)容packageorg.lxh.demo12.byteiodemo;importjava.io.File;importjava.io.FileOutputStream;importjava.io.OutputStream;public
classOutputStreamDemo03{
public
static
voidmain(String[]args)throwsException{//異常拋出,不處理
//第1步、使用File類找到一個(gè)文件
Filef=newFile("d:"+File.separator+"test.txt");//聲明File對象
//第2步:通過子類實(shí)例化父類對象
OutputStreamout=null; //準(zhǔn)備好一個(gè)輸出的對象
out=newFileOutputStream(f,true);//此處表示在文件末尾追加內(nèi)容
//第3步:進(jìn)行寫操作
Stringstr="HelloWorld!!!"; //準(zhǔn)備一個(gè)字符串
byteb[]=str.getBytes();//只能輸出byte數(shù)組,所以將字符串變?yōu)閎yte數(shù)組
for(inti=0;i<b.length;i++){ out.write(b[i]); //將內(nèi)容輸出
}
//第4步:關(guān)閉輸出流
out.close(); //關(guān)閉輸出流
}}字節(jié)輸入流:InputStream既然程序可以向文件中寫入內(nèi)容,則就可以通過InputStream從文件中把內(nèi)容讀取進(jìn)來,首先來看InputStream類的定義:publicabstractclassInputStreamextendsObjectimplementsCloseable與OutputStream類一樣,InputStream本身也是一個(gè)抽象類,必須依靠其子類,如果現(xiàn)在是從文件中讀取,子類肯定是FileInputStream。觀察FileInputStream類的構(gòu)造方法:publicFileInputStream(Filefile)throwsFileNotFoundExceptionInputStream類的常用方法No.方法或常量類型描述1publicintavailable()throwsIOException普通可以取得輸入文件的大小2publicvoidclose()throwsIOException普通關(guān)閉輸入流3publicabstractintread()throwsIOException普通讀取內(nèi)容,以數(shù)字的方式讀取4publicintread(byte[]b)throwsIOException普通將內(nèi)容讀到byte數(shù)組之中,同時(shí)返回讀入的個(gè)數(shù)從文件中讀取內(nèi)容packageorg.lxh.demo12.byteiodemo;importjava.io.File;importjava.io.FileInputStream;importjava.io.InputStream;public
classInputStramDemo01{
public
static
voidmain(String[]args)throwsException{//異常拋出,不處理
//第1步、使用File類找到一個(gè)文件
Filef=newFile("d:"+File.separator+"test.txt");//聲明File對象
//第2步:通過子類實(shí)例化父類對象
InputStreaminput=null; //準(zhǔn)備好一個(gè)輸入的對象
input=newFileInputStream(f); //通過對象多態(tài)性,進(jìn)行實(shí)例化
//第3步:進(jìn)行讀操作
byteb[]=new
byte[1024]; //所有的內(nèi)容讀到此數(shù)組之中
input.read(b); //把內(nèi)容取出,內(nèi)容讀到byte數(shù)組之中
//第4步:關(guān)閉輸入流
input.close(); //關(guān)閉輸入流
System.out.println("內(nèi)容為:"+newString(b));//把byte數(shù)組變?yōu)樽址敵?/p>
}}輸出數(shù)組中指定位置的內(nèi)容packageorg.lxh.demo12.byteiodemo;importjava.io.File;importjava.io.FileInputStream;importjava.io.InputStream;public
classInputStreamDemo02{
public
static
voidmain(String[]args)throwsException{//異常拋出,不處理
//第1步、使用File類找到一個(gè)文件
Filef=newFile("d:"+File.separator+"test.txt");//聲明File對象
//第2步:通過子類實(shí)例化父類對象
InputStreaminput=null; //準(zhǔn)備好一個(gè)輸入的對象
input=newFileInputStream(f); //通過對象多態(tài)性,進(jìn)行實(shí)例化
//第3步:進(jìn)行讀操作
byteb[]=new
byte[1024]; //所有的內(nèi)容讀到此數(shù)組之中
intlen=input.read(b); //將內(nèi)容讀出
//第4步:關(guān)閉輸入流
input.close(); //關(guān)閉輸入流
System.out.println("讀入數(shù)據(jù)的長度:"+len); System.out.println("內(nèi)容為:"+newString(b,0,len));//把byte數(shù)組變?yōu)樽址敵?/p>
}}開辟指定大小的byte數(shù)組packageorg.lxh.demo12.byteiodemo;importjava.io.File;importjava.io.FileInputStream;importjava.io.InputStream;public
classInputStreamDemo03{
public
static
voidmain(String[]args)throwsException{//異常拋出,不處理
//第1步、使用File類找到一個(gè)文件
Filef=newFile("d:"+File.separator+"test.txt");//聲明File對象
//第2步:通過子類實(shí)例化父類對象
InputStreaminput=null; //準(zhǔn)備好一個(gè)輸入的對象
input=newFileInputStream(f); //通過對象多態(tài)性,進(jìn)行實(shí)例化
//第3步:進(jìn)行讀操作
byteb[]=new
byte[(int)f.length()]; //所有的內(nèi)容讀到此數(shù)組之中,數(shù)組大小由文件決定
input.read(b); //將內(nèi)容讀出
//第4步:關(guān)閉輸入流
input.close(); //關(guān)閉輸入流
System.out.println("內(nèi)容為:"+newString(b));//把byte數(shù)組變?yōu)樽址敵?/p>
}}使用read()通過循環(huán)讀取packageorg.lxh.demo12.byteiodemo;importjava.io.File;importjava.io.FileInputStream;importjava.io.InputStream;public
classInputStreamDemo04{
public
static
voidmain(String[]args)throwsException{//異常拋出,不處理
//第1步、使用File類找到一個(gè)文件
Filef=newFile("d:"+File.separator+"test.txt");//聲明File對象
//第2步:通過子類實(shí)例化父類對象
InputStreaminput=null; //準(zhǔn)備好一個(gè)輸入的對象
input=newFileInputStream(f); //通過對象多態(tài)性,進(jìn)行實(shí)例化
//第3步:進(jìn)行讀操作
byteb[]=new
byte[(int)f.length()]; //所有的內(nèi)容讀到此數(shù)組之中
for(inti=0;i<b.length;i++){ b[i]=(byte)input.read(); //將內(nèi)容讀出
}
//第4步:關(guān)閉輸入流
input.close(); //關(guān)閉輸入流
System.out.println("內(nèi)容為:"+newString(b));//把byte數(shù)組變?yōu)樽址敵?/p>
}}另一種方式的讀取packageorg.lxh.demo12.byteiodemo;importjava.io.File;importjava.io.FileInputStream;importjava.io.InputStream;public
classInputStreamDemo05{
public
static
voidmain(String[]args)throwsException{//異常拋出,不處理
//第1步、使用File類找到一個(gè)文件
Filef=newFile("d:"+File.separator+"test.txt");//聲明File對象
//第2步:通過子類實(shí)例化父類對象
InputStreaminput=null; //準(zhǔn)備好一個(gè)輸入的對象
input=newFileInputStream(f); //通過對象多態(tài)性,進(jìn)行實(shí)例化
//第3步:進(jìn)行讀操作
intlen=0; //用于記錄讀取的數(shù)據(jù)個(gè)數(shù)
byteb[]=new
byte[1024]; //所有的內(nèi)容讀到此數(shù)組之中
inttemp=0; //接收讀取的每一個(gè)內(nèi)容
while((temp=input.read())!=-1){
//將每次的讀取內(nèi)容給temp變量,如果temp的值不是-1,則表示文件沒有讀完
b[len]=(byte)temp; len++; }
//第4步:關(guān)閉輸入流
input.close(); //關(guān)閉輸入流
System.out.println("內(nèi)容為:"+newString(b,0,len)); }}字符流在程序中一個(gè)字符等于2個(gè)字節(jié),那么JAVA提供了Reader、Writer兩個(gè)專門操作字符流的類。字符輸出流:Writer字符輸入流:Reader字符輸出流:WriterWriter本身是一個(gè)字符流的輸出類,此類的定義如下:publicabstractclassWriterextendsObjectimplementsAppendable,Closeable,Flushable此類本身也是一個(gè)抽象類,如果要想使用此類,則肯定要使用其子類,此時(shí)如果是向文件中寫入內(nèi)容,所以應(yīng)該使用FileWriter的子類。FileWriter類的構(gòu)造方法定義如下:publicFileWriter(Filefile)throwsIOExceptionWriter類的常用方法No.方法或常量類型描述1publicabstractvoidclose()throwsIOException普通關(guān)閉輸出流2publicvoidwrite(Stringstr)throwsIOException普通將字符串輸出3publicvoidwrite(char[]cbuf)throwsIOException普通將字符數(shù)組輸出4publicabstractvoidflush()throwsIOException普通強(qiáng)制性清空緩存向文件中寫入數(shù)據(jù)packageorg.lxh.demo12.chariodemo;importjava.io.File;importjava.io.FileWriter;importjava.io.Writer;public
classWriterDemo01{
public
static
voidmain(String[]args)throwsException{//異常拋出,不處理
//第1步、使用File類找到一個(gè)文件
Filef=newFile("d:"+File.separator+"test.txt");//聲明File對象
//第2步:通過子類實(shí)例化父類對象
Writerout=null; //準(zhǔn)備好一個(gè)輸出的對象
out=newFileWriter(f); //通過對象多態(tài)性,進(jìn)行實(shí)例化
//第3步:進(jìn)行寫操作
Stringstr="HelloWorld!!!"; //準(zhǔn)備一個(gè)字符串
out.write(str); //將內(nèi)容輸出
//第4步:關(guān)閉輸出流
out.close(); //關(guān)閉輸出流
}}使用FileWriter追加文件的內(nèi)容在使用字符流操作的時(shí)候,也可以實(shí)現(xiàn)文件的追加功能,直接使用FileWriter類中的以下構(gòu)造即可實(shí)現(xiàn)追加:publicFileWriter(Filefile,booleanappend)throwsIOException將append的值設(shè)置成true,就表示追加。追加文件內(nèi)容packageorg.lxh.demo12.chariodemo;importjava.io.File;importjava.io.FileWriter;importjava.io.Writer;public
classWriterDemo02{
public
static
voidmain(String[]args)throwsException{//異常拋出,不處理
//第1步、使用File類找到一個(gè)文件
Filef=newFile("d:"+File.separator+"test.txt");//聲明File對象
//第2步:通過子類實(shí)例化父類對象
Writerout=null; //準(zhǔn)備好一個(gè)輸出的對象
out=newFileWriter(f,true); //通過對象多態(tài)性,進(jìn)行實(shí)例化
//第3步:進(jìn)行寫操作
Stringstr="\r\nLIXINGHUA\r\nHelloWorld!!!"; //準(zhǔn)備一個(gè)字符串
out.write(str);//將內(nèi)容輸出
//第4步:關(guān)閉輸出流
out.close(); //關(guān)閉輸出流
}}字符輸入流:ReaderReader是使用字符的方式從文件之中取出數(shù)據(jù),Reader類的定義如下:publicabstractclassReaderextendsObjectimplementsReadable,CloseableReader本身也是抽象類,如果現(xiàn)在要從文件中讀取內(nèi)容,則可以直接使用FileReader子類。FileReader的構(gòu)造方法定義如下:publicFileReader(Filefile)throwsFileNotFoundExceptionReader類的常用方法No.方法或常量類型描述1publicabstractvoidclose()throwsIOException普通關(guān)閉輸出流2publicintread()throwsIOException普通讀取單個(gè)字符3publicintread(char[]cbuf)throwsIOException普通將內(nèi)容讀到字符數(shù)組之中,返回讀入的長度從文件中讀取內(nèi)容packageorg.lxh.demo12.chariodemo;importjava.io.File;importjava.io.FileReader;importjava.io.Reader;public
classReaderDemo01{
public
static
voidmain(String[]args)throwsException{//異常拋出,不處理
//第1步、使用File類找到一個(gè)文件
Filef=newFile("d:"+File.separator+"test.txt");//聲明File對象
//第2步:通過子類實(shí)例化父類對象
Readerreader=null; //準(zhǔn)備好一個(gè)輸入的對象
reader=newFileReader(f); //通過對象多態(tài)性,進(jìn)行實(shí)例化
//第3步:進(jìn)行讀操作
charc[]=new
char[1024]; //所有的內(nèi)容讀到此數(shù)組之中
intlen=reader.read(c); //將內(nèi)容輸出
//第4步:關(guān)閉輸入流
reader.close(); //關(guān)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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ǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 項(xiàng)目部食品安全衛(wèi)生制度
- 新媒體運(yùn)營日常漲薪制度
- 培訓(xùn)期間飲食衛(wèi)生制度
- 衛(wèi)生協(xié)會(huì)會(huì)計(jì)制度
- 派出所涉案財(cái)務(wù)制度
- 殺鴨廠財(cái)務(wù)制度
- 鄉(xiāng)鎮(zhèn)衛(wèi)生院第一議制度
- 鄉(xiāng)衛(wèi)生院考核獎(jiǎng)懲制度
- 衛(wèi)生院清潔消毒制度
- 中餐廳廚房衛(wèi)生制度
- 通信工程部的職責(zé)與技術(shù)要求
- 簡愛插圖本(英)夏洛蒂·勃朗特著宋兆霖譯
- 焊接專業(yè)人才培養(yǎng)方案
- 第二屆全國技能大賽江蘇省選拔賽焊接項(xiàng)目評(píng)分表
- 糖尿病護(hù)士年終總結(jié)
- 第20課 《美麗的小興安嶺》 三年級(jí)語文上冊同步課件(統(tǒng)編版)
- 糖尿病基礎(chǔ)知識(shí)培訓(xùn)2
- 手工藝品加工合同
- 研學(xué)旅行概論第六章
- GB/T 22176-2023二甲戊靈乳油
- 根據(jù)信用證制作商業(yè)發(fā)票、裝箱單、裝船通知
評(píng)論
0/150
提交評(píng)論