第三部分java應(yīng)用程序設(shè)計(jì)-字節(jié)流與字符_第1頁
第三部分java應(yīng)用程序設(shè)計(jì)-字節(jié)流與字符_第2頁
第三部分java應(yīng)用程序設(shè)計(jì)-字節(jié)流與字符_第3頁
第三部分java應(yīng)用程序設(shè)計(jì)-字節(jié)流與字符_第4頁
第三部分java應(yīng)用程序設(shè)計(jì)-字節(jié)流與字符_第5頁
免費(fèi)預(yù)覽已結(jié)束,剩余28頁可下載查看

下載本文檔

版權(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í)行程序,則肯定會覆蓋文件中的已有內(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)容里面會有圖紙預(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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論