




下載本文檔
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
JAVA應用開發詳解第12章:JAVAIO ——字節流與字符流MLDN軟件教學研發部本章目標掌握流的概念掌握字節流與字符流的作用掌握文件的標準操作步驟掌握字節與字符操作的區別流在程序中所有的數據都是以流的方式進行傳輸或保存的,程序需要數據的時候要使用輸入流讀取數據,而當程序需要將一些數據保存起來的時候,就要使用輸出流完成。字節流與字符流在java.io包中操作文件內容的主要有兩大類:字節流、字符流,兩類都分為輸入和輸出操作。在字節流中輸出數據主要是使用OutputStream完成,輸入使的是InputStream,在字符流中輸出主要是使用Writer類完成,輸入主要是使用Reader類完成。操作流程在JAVA中IO操作也是有相應步驟的,以文件操作為例,主要的操作流程如下:使用File類打開一個文件通過字節流或字符流的子類,指定輸出的位置進行讀/寫操作關閉輸入/輸出字節流字節流主要是操作byte類型數據,以byte數組為準,主要操作類就是OutputStream、InputStream。字節輸出流:OutputStream字節輸入流:InputStreamOutputStream類OutputStream是整個io包中字節輸出流的最大父類,此類的定義如下:publicabstractclassOutputStreamextendsObjectimplementsCloseable,Flushable從以上的定義中可以發現,此類是一個抽象類,如果要想使用此類的話,則首先必須通過子類實例化對象,那么如果現在要操作的是一個文件,則可以使用:FileOutputStream類。通過向上轉型之后,可以為OutputStream實例化。OutputStream類的常用方法要想使用以上方法,必須使用子類實例化,此時使用FileOutputStream子類,此類的構造方法如下:publicFileOutputStream(Filefile)throwsFileNotFoundExceptionNo.方法或常量類型描述1publicvoidclose()throwsIOException普通關閉輸出流2publicvoidflush()throwsIOException普通刷新緩沖區3publicvoidwrite(byte[]b)throwsIOException普通將一個byte數組寫入數據流4publicvoidwrite(byte[]b,intoff,intlen)throwsIOException普通將一個指定范圍的byte數組寫入數據流5publicabstractvoidwrite(intb)throwsIOException普通將一個字節數據寫入數據流向文件中寫入字符串packageorg.lxh.demo12.byteiodemo;importjava.io.File;importjava.io.FileOutputStream;importjava.io.OutputStream;public
classOutputStreamDemo01{
public
static
voidmain(String[]args)throwsException{//異常拋出,不處理
//第1步、使用File類找到一個文件
Filef=newFile("d:"+File.separator+"test.txt");//聲明File對象
//第2步:通過子類實例化父類對象
OutputStreamout=null; //準備好一個輸出的對象
out=newFileOutputStream(f); //通過對象多態性,進行實例化
//第3步:進行寫操作
Stringstr="HelloWorld!!!"; //準備一個字符串
byteb[]=str.getBytes();//只能輸出byte數組,所以將字符串變為byte數組
out.write(b); //將內容輸出,保存文件
//第4步:關閉輸出流
out.close(); //關閉輸出流
}}使用write(intt)的方式寫入文件內容packageorg.lxh.demo12.byteiodemo;importjava.io.File;importjava.io.FileOutputStream;importjava.io.OutputStream;public
classOutputStreamDemo02{
public
static
voidmain(String[]args)throwsException{//異常拋出,不處理
//第1步、使用File類找到一個文件
Filef=newFile("d:"+File.separator+"test.txt");//聲明File對象
//第2步:通過子類實例化父類對象
OutputStreamout=null; //準備好一個輸出的對象
out=newFileOutputStream(f); //通過對象多態性,進行實例化
//第3步:進行寫操作
Stringstr="HelloWorld!!!"; //準備一個字符串
byteb[]=str.getBytes();//只能輸出byte數組,所以將字符串變為byte數組
for(inti=0;i<b.length;i++){ out.write(b[i]); //將內容輸出
}
//第4步:關閉輸出流
out.close(); //關閉輸出流
}}追加新內容之前的所有操作中,如果重新執行程序,則肯定會覆蓋文件中的已有內容,那么此時可以通過FielOutputStream向文件中追加內容,FileOutputStream的另外一個構造方法:publicFileOutputStream(Filefile,booleanappend)throwsFileNotFoundException在構造方法中,如果將append的值設置為true,則表示在文件的末尾追加內容。修改之前的程序,追加文件內容packageorg.lxh.demo12.byteiodemo;importjava.io.File;importjava.io.FileOutputStream;importjava.io.OutputStream;public
classOutputStreamDemo03{
public
static
voidmain(String[]args)throwsException{//異常拋出,不處理
//第1步、使用File類找到一個文件
Filef=newFile("d:"+File.separator+"test.txt");//聲明File對象
//第2步:通過子類實例化父類對象
OutputStreamout=null; //準備好一個輸出的對象
out=newFileOutputStream(f,true);//此處表示在文件末尾追加內容
//第3步:進行寫操作
Stringstr="HelloWorld!!!"; //準備一個字符串
byteb[]=str.getBytes();//只能輸出byte數組,所以將字符串變為byte數組
for(inti=0;i<b.length;i++){ out.write(b[i]); //將內容輸出
}
//第4步:關閉輸出流
out.close(); //關閉輸出流
}}字節輸入流:InputStream既然程序可以向文件中寫入內容,則就可以通過InputStream從文件中把內容讀取進來,首先來看InputStream類的定義:publicabstractclassInputStreamextendsObjectimplementsCloseable與OutputStream類一樣,InputStream本身也是一個抽象類,必須依靠其子類,如果現在是從文件中讀取,子類肯定是FileInputStream。觀察FileInputStream類的構造方法:publicFileInputStream(Filefile)throwsFileNotFoundExceptionInputStream類的常用方法No.方法或常量類型描述1publicintavailable()throwsIOException普通可以取得輸入文件的大小2publicvoidclose()throwsIOException普通關閉輸入流3publicabstractintread()throwsIOException普通讀取內容,以數字的方式讀取4publicintread(byte[]b)throwsIOException普通將內容讀到byte數組之中,同時返回讀入的個數從文件中讀取內容packageorg.lxh.demo12.byteiodemo;importjava.io.File;importjava.io.FileInputStream;importjava.io.InputStream;public
classInputStramDemo01{
public
static
voidmain(String[]args)throwsException{//異常拋出,不處理
//第1步、使用File類找到一個文件
Filef=newFile("d:"+File.separator+"test.txt");//聲明File對象
//第2步:通過子類實例化父類對象
InputStreaminput=null; //準備好一個輸入的對象
input=newFileInputStream(f); //通過對象多態性,進行實例化
//第3步:進行讀操作
byteb[]=new
byte[1024]; //所有的內容讀到此數組之中
input.read(b); //把內容取出,內容讀到byte數組之中
//第4步:關閉輸入流
input.close(); //關閉輸入流
System.out.println("內容為:"+newString(b));//把byte數組變為字符串輸出
}}輸出數組中指定位置的內容packageorg.lxh.demo12.byteiodemo;importjava.io.File;importjava.io.FileInputStream;importjava.io.InputStream;public
classInputStreamDemo02{
public
static
voidmain(String[]args)throwsException{//異常拋出,不處理
//第1步、使用File類找到一個文件
Filef=newFile("d:"+File.separator+"test.txt");//聲明File對象
//第2步:通過子類實例化父類對象
InputStreaminput=null; //準備好一個輸入的對象
input=newFileInputStream(f); //通過對象多態性,進行實例化
//第3步:進行讀操作
byteb[]=new
byte[1024]; //所有的內容讀到此數組之中
intlen=input.read(b); //將內容讀出
//第4步:關閉輸入流
input.close(); //關閉輸入流
System.out.println("讀入數據的長度:"+len); System.out.println("內容為:"+newString(b,0,len));//把byte數組變為字符串輸出
}}開辟指定大小的byte數組packageorg.lxh.demo12.byteiodemo;importjava.io.File;importjava.io.FileInputStream;importjava.io.InputStream;public
classInputStreamDemo03{
public
static
voidmain(String[]args)throwsException{//異常拋出,不處理
//第1步、使用File類找到一個文件
Filef=newFile("d:"+File.separator+"test.txt");//聲明File對象
//第2步:通過子類實例化父類對象
InputStreaminput=null; //準備好一個輸入的對象
input=newFileInputStream(f); //通過對象多態性,進行實例化
//第3步:進行讀操作
byteb[]=new
byte[(int)f.length()]; //所有的內容讀到此數組之中,數組大小由文件決定
input.read(b); //將內容讀出
//第4步:關閉輸入流
input.close(); //關閉輸入流
System.out.println("內容為:"+newString(b));//把byte數組變為字符串輸出
}}使用read()通過循環讀取packageorg.lxh.demo12.byteiodemo;importjava.io.File;importjava.io.FileInputStream;importjava.io.InputStream;public
classInputStreamDemo04{
public
static
voidmain(String[]args)throwsException{//異常拋出,不處理
//第1步、使用File類找到一個文件
Filef=newFile("d:"+File.separator+"test.txt");//聲明File對象
//第2步:通過子類實例化父類對象
InputStreaminput=null; //準備好一個輸入的對象
input=newFileInputStream(f); //通過對象多態性,進行實例化
//第3步:進行讀操作
byteb[]=new
byte[(int)f.length()]; //所有的內容讀到此數組之中
for(inti=0;i<b.length;i++){ b[i]=(byte)input.read(); //將內容讀出
}
//第4步:關閉輸入流
input.close(); //關閉輸入流
System.out.println("內容為:"+newString(b));//把byte數組變為字符串輸出
}}另一種方式的讀取packageorg.lxh.demo12.byteiodemo;importjava.io.File;importjava.io.FileInputStream;importjava.io.InputStream;public
classInputStreamDemo05{
public
static
voidmain(String[]args)throwsException{//異常拋出,不處理
//第1步、使用File類找到一個文件
Filef=newFile("d:"+File.separator+"test.txt");//聲明File對象
//第2步:通過子類實例化父類對象
InputStreaminput=null; //準備好一個輸入的對象
input=newFileInputStream(f); //通過對象多態性,進行實例化
//第3步:進行讀操作
intlen=0; //用于記錄讀取的數據個數
byteb[]=new
byte[1024]; //所有的內容讀到此數組之中
inttemp=0; //接收讀取的每一個內容
while((temp=input.read())!=-1){
//將每次的讀取內容給temp變量,如果temp的值不是-1,則表示文件沒有讀完
b[len]=(byte)temp; len++; }
//第4步:關閉輸入流
input.close(); //關閉輸入流
System.out.println("內容為:"+newString(b,0,len)); }}字符流在程序中一個字符等于2個字節,那么JAVA提供了Reader、Writer兩個專門操作字符流的類。字符輸出流:Writer字符輸入流:Reader字符輸出流:WriterWriter本身是一個字符流的輸出類,此類的定義如下:publicabstractclassWriterextendsObjectimplementsAppendable,Closeable,Flushable此類本身也是一個抽象類,如果要想使用此類,則肯定要使用其子類,此時如果是向文件中寫入內容,所以應該使用FileWriter的子類。FileWriter類的構造方法定義如下:publicFileWriter(Filefile)throwsIOExceptionWriter類的常用方法No.方法或常量類型描述1publicabstractvoidclose()throwsIOException普通關閉輸出流2publicvoidwrite(Stringstr)throwsIOException普通將字符串輸出3publicvoidwrite(char[]cbuf)throwsIOException普通將字符數組輸出4publicabstractvoidflush()throwsIOException普通強制性清空緩存向文件中寫入數據packageorg.lxh.demo12.chariodemo;importjava.io.File;importjava.io.FileWriter;importjava.io.Writer;public
classWriterDemo01{
public
static
voidmain(String[]args)throwsException{//異常拋出,不處理
//第1步、使用File類找到一個文件
Filef=newFile("d:"+File.separator+"test.txt");//聲明File對象
//第2步:通過子類實例化父類對象
Writerout=null; //準備好一個輸出的對象
out=newFileWriter(f); //通過對象多態性,進行實例化
//第3步:進行寫操作
Stringstr="HelloWorld!!!"; //準備一個字符串
out.write(str); //將內容輸出
//第4步:關閉輸出流
out.close(); //關閉輸出流
}}使用FileWriter追加文件的內容在使用字符流操作的時候,也可以實現文件的追加功能,直接使用FileWriter類中的以下構造即可實現追加:publicFileWriter(Filefile,booleanappend)throwsIOException將append的值設置成true,就表示追加。追加文件內容packageorg.lxh.demo12.chariodemo;importjava.io.File;importjava.io.FileWriter;importjava.io.Writer;public
classWriterDemo02{
public
static
voidmain(String[]args)throwsException{//異常拋出,不處理
//第1步、使用File類找到一個文件
Filef=newFile("d:"+File.separator+"test.txt");//聲明File對象
//第2步:通過子類實例化父類對象
Writerout=null; //準備好一個輸出的對象
out=newFileWriter(f,true); //通過對象多態性,進行實例化
//第3步:進行寫操作
Stringstr="\r\nLIXINGHUA\r\nHelloWorld!!!"; //準備一個字符串
out.write(str);//將內容輸出
//第4步:關閉輸出流
out.close(); //關閉輸出流
}}字符輸入流:ReaderReader是使用字符的方式從文件之中取出數據,Reader類的定義如下:publicabstractclassReaderextendsObjectimplementsReadable,CloseableReader本身也是抽象類,如果現在要從文件中讀取內容,則可以直接使用FileReader子類。FileReader的構造方法定義如下:publicFileReader(Filefile)throwsFileNotFoundExceptionReader類的常用方法No.方法或常量類型描述1publicabstractvoidclose()throwsIOException普通關閉輸出流2publicintread()throwsIOException普通讀取單個字符3publicintread(char[]cbuf)throwsIOException普通將內容讀到字符數組之中,返回讀入的長度從文件中讀取內容packageorg.lxh.demo12.chariodemo;importjava.io.File;importjava.io.FileReader;importjava.io.Reader;public
classReaderDemo01{
public
static
voidmain(String[]args)throwsException{//異常拋出,不處理
//第1步、使用File類找到一個文件
Filef=newFile("d:"+File.separator+"test.txt");//聲明File對象
//第2步:通過子類實例化父類對象
Readerreader=null; //準備好一個輸入的對象
reader=newFileReader(f); //通過對象多態性,進行實例化
//第3步:進行讀操作
charc[]=new
char[1024]; //所有的內容讀到此數組之中
intlen=reader.read(c); //將內容輸出
//第4步:關閉輸入流
reader.close(); //關
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 郵政分揀設備性能測試與評價考核試卷
- 木片加工車間數字化管理考核試卷
- 學習數據庫開發中的樣例數據創建策略試題及答案
- 功耗優化在嵌入式中的實踐試題及答案
- 數據庫設計中的關鍵考察點試題及答案
- 公路工程交通管理最佳實踐試題及答案
- 廠區小區住宿管理制度
- 宿舍物業維修管理制度
- 封閉現場紀律管理制度
- 計算機二級MySQL函數應用試題及答案
- 建設工程法規考試題真題及答案
- 深圳市住房公積金管理中心員額人員招聘真題2024
- 2025年全國國家版圖知識競賽題庫及答案
- 《創傷失血性休克中國急診專家共識(2023)》解讀課件
- MOOC 數字邏輯電路實驗-東南大學 中國大學慕課答案
- 入團志愿書(2016版本)(可編輯打印標準A4) (1)
- 小升初個人簡歷表
- 監控系統工程量清單2
- 財務部門內部管理制度-1
- 模擬電子技術基本概念復習題及答案
- 福建省事業單位工作人員登記表
評論
0/150
提交評論