




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
程序設(shè)計第9章輸入與輸出目錄2
9.1數(shù)據(jù)流的基本概念
9.2字節(jié)輸入/輸出流
9.3字符輸入/輸出流9.4文件處理
9.5對象串行化9.1數(shù)據(jù)流的基本概念I(lǐng)/O處理用流來表示3內(nèi)存外設(shè)
(硬盤)流(管道)輸入流(讀入)輸出流(寫出)9.1.1輸入/輸出流輸入輸出流的分類按流的方向分類輸入流輸出流按流處理的數(shù)據(jù)單位不同分類字節(jié)流字符流按流的功能不同分類節(jié)點流處理流49.1.2輸入/輸出類輸入輸出流有關(guān)的類Java語言提供的與I/O流有關(guān)的類多達數(shù)十種,它們分為四大類字節(jié)輸入流InputStream字節(jié)輸出流OutputStream字符輸入流Reader字符輸出流Writer59.2字節(jié)輸入/輸出流以字節(jié)為單位對數(shù)據(jù)進行處理字節(jié)輸入流從外設(shè)(硬盤)讀取數(shù)據(jù)read()方法字節(jié)輸出流將數(shù)據(jù)寫出到外設(shè)(硬盤)write()方法適用于處理二進制文件可執(zhí)行文件:*.exe、*.dll等圖片圖像文件:*.gif、*.jpg等特定格式的文件:*.doc、*.pdf等6FileInputStream類(1)FileInputStream類的構(gòu)造方法通過文件file對象來創(chuàng)建一個FileInputStream對象publicFileInputStream(Filefile)throwsFileNotFoundException通過文件名為name的文件來創(chuàng)建一個FileInputStream對象publicFileInputStream(Stringname)throwsFileNotFoundException如果指定的文件不存在,或者因為其他原因無法進行文件讀取,則會拋出FileNotFoundException的異常。7FileInputStream類(2)FileInputStream類的Read()方法從輸入流中讀取一個數(shù)據(jù)字節(jié)。如果已到達文件末尾,返回-1。publicintread()throwsIOException從輸入流中將最多b.length個字節(jié)的數(shù)據(jù)讀入到byte數(shù)組中。如果已到達文件末尾,返回-1。publicintread(byte[]b)throwsIOException對于這兩個read()方法,如果讀取文件時發(fā)生錯誤,則會拋出IOException的異常。8FileOutputStream類(1)FileOutputStream類的構(gòu)造方法創(chuàng)建一個指向file文件中寫入字節(jié)數(shù)據(jù)的FileOutputStream對象publicFileOutputStream(Filefile)throwsFileNotFoundException創(chuàng)建一個指向File文件中寫入字節(jié)數(shù)據(jù)的FileOutputStream對象,且如果第2個參數(shù)為true,則將字節(jié)數(shù)據(jù)追加到文件末尾處,否則將字節(jié)數(shù)據(jù)寫入文件開始處覆蓋原有的文件publicFileOutputStream(Filefile,booleanappend)throwsFileNotFoundException創(chuàng)建一個向具體指定名稱為name的文件中寫入字節(jié)數(shù)據(jù)的FileOutputStream對象publicFileOutputStream(Stringname)throwsFileNotFoundException創(chuàng)建一個向具體指定名稱為name的文件中寫入字節(jié)數(shù)據(jù)的FileOutputStream對象,且如果第2個參數(shù)為true,則將字節(jié)數(shù)據(jù)追加到文件末尾處,否則將字節(jié)數(shù)據(jù)寫入文件開始處覆蓋原有的文件publicFileOutputStream(Stringname,booleanappend)throwsFileNotFoundException
對于這四個構(gòu)造方法,如果指定的文件不存在,或者因為其他原因無法進行文件寫入,則會拋出FileNotFoundException的異常。9FileOutputStream類(2)FileOutputStream類的Write()方法將指定字節(jié)寫入文件輸出流。write的常規(guī)協(xié)定是向輸出流寫入一個字節(jié),要寫入的字節(jié)是參數(shù)b的8個低位。publicvoidwrite(intb)throwsIOException將b.length個字節(jié)從byte數(shù)組寫入文件輸出流中。publicvoidwrite(byte[]b)throwsIOException對于這兩個write()方法,如果寫入文件時發(fā)生錯誤,則會拋出IOException的異常。10操作步驟11
FileInputStreamfis=null;//聲明一個流。fis=newFileInputStream("E:/filename.txt");//打開文件intb;
b=fis.read();//讀入一個字節(jié)
System.out.print((char)b);
//輸出到屏幕上fis.close();System.out.println("\n文件讀出完成.");【例9.1】在E盤中存在test.txt文件,通過字節(jié)流方式讀取該文件中的數(shù)據(jù),并輸出到控制臺。12public
classFileInput{public
static
voidmain(String[]args){
//讀取E盤test.txt中的內(nèi)容,顯示輸出FileInputStreamin=null;int
b;try{in=newFileInputStream("E:/test.txt");while((b=in.read())!=-1){System.out.print((char)b);}}catch(FileNotFoundExceptione){System.out.println("文件沒找到");}catch(IOExceptione){System.out.println("輸入輸出異常");}finally{if(in!=null){try{in.close();}catch(IOExceptione){System.out.println("文件無法正常關(guān)閉");}}}}}【例9.2】通過字節(jié)流讀取與寫入的方式,實現(xiàn)文件復(fù)制的功能(從E:\source.jpg文件復(fù)制
到E:\target.jpg文件中)。public
classFileCopy{public
static
voidmain(String[]args){//讀取E盤source.jpg中的內(nèi)容,復(fù)制到target.jpgFileInputStreamfis=null;FileOutputStreamfos=null;byte[]b=new
byte[1024];try{fis=newFileInputStream("E:/source.jpg");fos=newFileOutputStream("E:/target.jpg");while((fis.read(b))!=-1){fos.write(b);}fos.flush();}catch(FileNotFoundExceptione){System.out.println("文件沒找到");}catch(IOExceptione){System.out.println("輸入輸出異常");}finally{
13if(fis!=null){try{fis.close();}catch(IOExceptione){System.out.println("文件無法正常關(guān)閉");}}if(fos!=null){try{fos.close();}catch(IOExceptione){System.out.println("文件無法正常關(guān)閉");}}}System.out.println("操作完畢");}}
9.2.2過濾流需要進行特殊數(shù)據(jù)的輸入/輸出:過濾流DataInputStream類和DataOutputStream類可以讀/寫各種JAVA語言的數(shù)據(jù)類型【例9.3】通過過濾流讀取與寫入的方式,實現(xiàn)包含中文字符的文件的讀寫功能。fos=newFileOutputStream("E:/test.txt");dos=newDataOutputStream(fos);dos.writeInt(100);dos.writeBoolean(true);dos.writeFloat(3.14F);dos.writeDouble(5.12);dos.writeUTF("您好");dos.flush();fis=newFileInputStream("E:/test.txt");dis=newDataInputStream(fis);System.out.println(dis.readInt());System.out.println(dis.readBoolean());System.out.println(dis.readFloat());System.out.println(dis.readDouble());System.out.println(dis.readUTF());15緩沖流緩沖流是一種過濾流可以寫成一行輸入流輸出流16內(nèi)存外設(shè)
(硬盤)過濾流FileInputStreamBufferedInputStream
FileInputStreamfis;fis=newFileInputStream("filename");
BufferedInputStreambis;bis=newBufferedInputStream(fis);
BufferedInputStreambis=newBufferedInputStream(newFileInputStream("filename"));BufferedOutputStreambos=newBufferedOutputStream(newFileOutputStream("filename"));緩沖流BufferedInputStream類和BufferedOutputStream類直接處理大文件時,效率是非常低的使用緩沖技術(shù)可以提高效率17
intb=0;FileInputStreamfis;fis=newFileInputStream("filename");BufferedInputStreambis;bis=newBufferedInputStream(fis);while((b=bis.read())!=-1){System.out.print((char)b);}bis.close();
intb=0;FileInputStreamfis;fis=newFileInputStream("filename");while((b=fis.read())!=-1){//每次讀入一個字節(jié),返回-1表示沒有內(nèi)容可讀System.out.print((char)b);//輸出到屏幕上}fis.close();【例9.4】通過BufferedInputStream類和BufferedOutputStream類對【例9.2】進行改進。 FileInputStreamfis=null; //聲明字節(jié)輸入流 FileOutputStreamfos=null;//聲明字節(jié)輸出流 BufferedInputStreambis=null; //聲明緩沖輸入流 BufferedOutputStreambos=null; //聲明緩沖輸出流 try{
bis=newBufferedInputStream(newFileInputStream(("d:/mytest.jpg"))); bos=newBufferedOutputStream(newFileOutputStream(("e:/mycopy.jpg"))); intb; while((b=bis.read())!=-1){ //其余代碼不需改變,只是改為緩沖流 bos.write((byte)b); } }catch(FileNotFoundExceptione){
。。。。。189.3字符輸入/輸出流以字符為單位對數(shù)據(jù)進行處理字符輸入流從外設(shè)(硬盤)讀取數(shù)據(jù)read()方法字符輸出流將數(shù)據(jù)寫出到外設(shè)(硬盤)write()方法適合處理文本文件,特別是含有Unicode碼(中文)的源代碼文件*.xml文件、*.html文件某些配置文件(*.properties、*.ini等)腳本文件等19字符流的有關(guān)方法字符輸入流FileReader類字符輸出流FileWriter類20操作步驟21
FileReaderfis=null;
//聲明一個流。fis=newFileReader("E:/filename.txt");
//打開文件intb;b=fis.read();
//讀入一個字符System.out.print(b);
//輸出到屏幕上fis.close();System.out.println("\n文件讀出完成.");比較一下(字節(jié)流)
FileInputStreamfis=null;
//聲明一個流。fis=newFileInputStream("E:/filename.txt");//打開文件intb;
b=fis.read();//讀入一個字節(jié)
System.out.print((char)b);
//輸出到屏幕上fis.close();System.out.println("\n文件讀出完成.");變量b都是int類型的,但一個用了其中的8位,一個用了其中的16位【例9.5】通過字符流讀取與寫入的方式,實現(xiàn)文件復(fù)制的功能。22public
classCopyCharFile{public
static
voidmain(String[]args){FileReaderfr=null;//聲明字符輸入流FileWriterfw=null;//聲明字符輸出流try{fr=newFileReader("D:/mytest.txt");fw=newFileWriter("E:/mycopy.txt");int
b;while((b=fr.read())!=-1){
fw.write(b);//寫出}//復(fù)制完成}catch(FileNotFoundExceptione){System.out.println("文件不存在!");}catch(IOExceptione){System.out.println("輸入輸出異常!");}finally{//即使不捕獲異常,也必須使用try...finallyif(fr!=null){try{fr.close();//關(guān)閉字符輸入流}catch(IOExceptione){System.out.println("輸入輸出異常!");}}if(fw!=null){try{fw.close();//關(guān)閉字符輸出流}catch(IOExceptione){System.out.println("輸入輸出異常!");}}}System.out.println("\n文件復(fù)制完成.");}}緩沖字符流常用方法緩沖型字符輸入流緩沖型字符輸出流23
BufferedReader
in=newBufferedReader(newFileReader(fileName));
BufferedWriterout=newBufferedWriter(newFileWriter(fileName));【例9.6】將從鍵盤讀取的數(shù)據(jù)寫入到指定的文件中去(直到輸入字符“n”時結(jié)束)。24public
classBufferedTest{public
static
voidmain(String[]args){InputStreamReaderin;FileWriterout;BufferedReaderbr;try{in=newInputStreamReader(System.in);br=newBufferedReader(in);out=newFileWriter("d:/test.txt");Stringstr=br.readLine();while(!str.equals("n")){System.out.println("str="+str);out.write(str+"\r\n");str=br.readLine();}out.flush();in.close();br.close();}catch(Exceptione){e.printStackTrace();}}}注意事項結(jié)束時要關(guān)閉流,并且關(guān)閉的代碼應(yīng)該放在finally語句塊中。使用緩沖流可以大幅度提高性能。使用各種過濾流來完成特定的功能,如加密和解密。259.4文件處理9.1.1文件處理概述文件處理文件操作目錄操作:是一種特殊的文件File類平臺無關(guān)性對Linux和Windows平臺,使用相同的File類26Windows文件系統(tǒng)Linux文件系統(tǒng)文件類的使用File類描述了文件對象的屬性和提供了對文件對象的操作。27一些常用的操作獲得文件或目錄的信息判斷文件或目錄是否存在28
Filefile=newFile("D:/eclipse/eclipse.exe");System.out.println(file.exists());//true,文件存在System.out.println(file.length());//57344System.out.println(file.getPath());//D:\eclipse\eclipse.exeSystem.out.println(file.getParent());//D:\eclipseSystem.out.println(file.getName());//eclipse.exeSystem.out.println(file.isDirectory());//falseSystem.out.println(file.isFile());
//true
if(!newFile("D:/eclipse/eclipse.exe").exists()){System.out.println("文件eclipse.exe找不到.");}一些常用的操作(二)刪除文件或目錄刪除失敗的可能原因有:要刪除的文件或目錄不存在。要刪除的是一個目錄,而該目錄下還有文件或目錄。沒有權(quán)限進行刪除操作。創(chuàng)建目錄29
if(newFile("D:/doc/myfile.txt").delete()){System.out.println("刪除成功.");}else{System.out.println("刪除失敗.");}newFile(“D:/docs/mydoc”).mkdir();//如果目錄docs不存在,則創(chuàng)建失敗newFile("D:/docs/mydoc").mkdirs();//如果目錄docs不存在也將被創(chuàng)建列出一個目錄下的所有文件使用listFiles()方法返回的是File數(shù)組使用list()方法返回的是String數(shù)組30
Filefile=newFile("c:/windows");String[]fileName=file.list();System.out.println("共有"+fileName.length+"個文件和目錄。");for(inti=0;i<fileName.length;i++){System.out.println(fileName[i]);}
Filefile=newFile("c:/windows");File[]files=file.listFiles();System.out.println("共有"+files.length+"個文件和目錄。");for(inti=0;i<files.length;i++){System.out.println(files[i].getName());}列出一個目錄及其子目錄下的所有文件通過遞歸調(diào)用實現(xiàn)31
publicstaticvoidmain(String[]args){Stringpath=System.getProperty("user.dir");//取得當(dāng)前目錄Filefile=newFile(path);listAll(file);}
publicstaticvoidlistAll(Filedir){//遞歸列出目錄和文件if(dir.isDirectory()){System.out.println("==目錄:"+dir.getName());}else{System.out.println("文件名:"+dir.getName());}if(dir.isDirectory()){//如果是目錄,列出子目錄的內(nèi)容String[]children=dir.list();for(inti=0;i<children.length;i++){
listAll(newFile(dir,children[i]));//直接遞歸調(diào)用}}}文件名過濾器listFiles()方法和list()方法有一個重載,可以指定文件名過濾器文件名過濾器需要自定義,它必須實現(xiàn)FilenameFilter接口32classFilterimplementsFilenameFilter{//實現(xiàn)文件名過濾器StringextName;
//擴展名Filter(Stringextent){
//構(gòu)造方法初始化擴展名的設(shè)置this.extName=extent;}publicbooleanaccept(Filedir,Stringname){returnname.endsWith("."+extName);//滿足擴展名要求,則返回true}}Filterfilter=newFilter("exe");
Stringfiles[]=dir.list(filter);9.5對象的串行化串行化(序列化)作用是將對象的狀態(tài)保存下來因此也稱為持續(xù)性(持久性)串行化的用途:將對象保存到文件中,需要時再讀取出來。程序運行時通過網(wǎng)絡(luò)傳輸對象。33聲明可串行化的類只有實現(xiàn)了java.io的Serializable接口,一個類的實例才是可串行化的importjava.io.Serializable;//實現(xiàn)Serializable接口,聲明這個類是可串行化的public
classRectangleimplementsSerializable{private
static
final
long
serialVersionUID=1L;//串行化版本號//以下部分與普通類完全相同private
int
length;private
int
width;public
intgetLength(){return
length;}public
voidsetLength(int
length){this.length=length;}……}34串行化串行化是將對象寫到文件中(或其它流中)public
static
voidwriteRectangle(Rectanglerec,Stri
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度紅木家具定制與古建筑修復(fù)合同
- 長春2025年度貨運合同糾紛律師調(diào)解服務(wù)協(xié)議
- 2025年度租賃合同解除函及房屋租賃市場調(diào)研報告
- 產(chǎn)品入庫管理表格(零售業(yè)特定)
- 汽車維修技術(shù)故障診斷與排除試卷及答案解析
- 租賃平臺房東與租客權(quán)益保障協(xié)議
- 農(nóng)村環(huán)境保護與生態(tài)恢復(fù)項目合作合同書
- 鄉(xiāng)村新型產(chǎn)業(yè)開發(fā)項目協(xié)議
- 史記中的人物故事深度解讀
- 鋪貨擔(dān)保合同合作協(xié)議
- 鋰電池過充過放析銅析鋰產(chǎn)氣成分及原理0
- 國家重點保護古生物化石及產(chǎn)地名錄(2011年)
- GB/T 28621-2023安裝于現(xiàn)有建筑物中的新電梯制造與安裝安全規(guī)范
- 校園超市經(jīng)營投標(biāo)方案(完整技術(shù)標(biāo))
- 第三單元《手拉手》大單元(教學(xué)設(shè)計)人音版音樂一年級下冊
- 如何做好一名IPQC課件
- 九年級語文成績分析期末考試質(zhì)量分析試卷分析報告與評價報告
- 白金五星級酒店餐飲部員工操作手冊(sop)宴會部(doc-66)
- 小學(xué)體育與健康人教體育與健康基礎(chǔ)知識輕度損傷的自我處理【省一等獎】
- 農(nóng)產(chǎn)品溯源系統(tǒng)解決方案
- 高密度電法勘探課件
評論
0/150
提交評論