版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第五章 流和文件處理1本章重點流的概念I(lǐng)nputStream和OutputStream文件輸入輸出流類數(shù)據(jù)輸入輸出流類25.1Java中的流數(shù)據(jù)源和數(shù)據(jù)宿之間有序運(yùn)動的數(shù)據(jù)序列.數(shù)據(jù)流分為輸入數(shù)據(jù)流和輸出數(shù)據(jù)流.流式輸入輸出的特點是數(shù)據(jù)的獲取和發(fā)送沿數(shù)據(jù)序列的順序進(jìn)行.數(shù)據(jù)發(fā)送端(生產(chǎn)者)數(shù)據(jù)接收端(消費(fèi)者)緩沖區(qū)緩沖區(qū)流的數(shù)據(jù)傳送35.1Java中的流45.1Java中的流java.lang.ObjectOutputStreamReaderWriterFileRandomAccessFileInputStream5字節(jié)流:從InputStream和OutputStream派生出來的一系列類。這類流以字節(jié)(byte)為基本處理單位。字符流:從Reader和Writer派生出的一系列類,這類流以16位的Unicode碼表示的字符為基本處理單位。61、輸入流的繼承關(guān)系InputStreamFileInputStreamByteArrayInputStreamObjectInputStreamFilterInputStreamDataInputStreamPipedInputStreamSequenceInputStreamPushbackInputStreamBufferedInputStream72、輸出流的繼承關(guān)系OutputStreamFileOutputStreamByteArrayOutputStreamObjectOutputStreamFilterOutputStreamDataOutputStreamPipedOutputStreamSequenceOutputStreamPrintStreamBufferedOutputStream8PrintStreamprint()println()write()5.2打印流95.2打印流System.in對象 System.in是InputStream類的對象,調(diào)用System.in.read()方法就可以實現(xiàn)標(biāo)準(zhǔn)輸入的讀操作.System.out對象 System.out是PrintStream類的對象,PrintStream類是FilterOutputStream類的子類,其中定義了可輸出多種不同類型數(shù)據(jù)的方法print()和println()方法.105.3系統(tǒng)屬性System類getProperty()setProperties()read()readLine()11例importjava.io.*;publicclassex22{ publicstaticvoidmain(Stringarg[])throwsIOException { charc; System.out.println("entercharacters,qtoquit."); do{ c=(char)System.in.read(); System.out.println(c); }while(c!='q'); }}12importjava.io.*;public
classex23{@SuppressWarnings("deprecation")public
static
voidmain(String[]args)throwsIOException{DataInputStreamin=newDataInputStream(System.in);Stringstr;System.out.println("Enterlinesoftext");System.out.println("Enter'End'ofquit");do{str=in.readLine();System.out.println(str);}while(!str.equals("End"));}}135.4輸入和輸出流InputStream類publicabstractintread()throwsIOException:從輸入流的當(dāng)前位置讀取一個字節(jié)的數(shù)據(jù),并返回一int型值,如果當(dāng)前位置沒有數(shù)據(jù)則返回-1. publicintread(byte[]b):該方法從輸入流的當(dāng)前位置開始讀取多個字節(jié),并將它們保存到字節(jié)數(shù)組b中,同時返回所讀到的字節(jié)數(shù),如果當(dāng)前位置沒有數(shù)據(jù)則返回-1. publicintread(byte[]b,intoff,intlen):該方法從輸入流的當(dāng)前位置讀取指定個數(shù)(len)的字節(jié),并將讀取的字節(jié)寫入到off位置起的字節(jié)數(shù)組b中,,同時返回所讀到的字節(jié)數(shù),如果當(dāng)前位置沒有數(shù)據(jù)則返回-1. publicintavailable():返回輸入流中可以讀取的字節(jié)數(shù). publicvoidclose():關(guān)閉輸入流,并釋放流占用的系統(tǒng)資源.14importjava.io.*;public
classex22{ public
static
voidmain(Stringarg[])throwsIOException{ bytec[]=new
byte[10]; System.out.println("enter10characters."); intp=System.in.read(c,5,5); Stringff=newString(c); System.out.println(ff); System.out.println(p); }}155.4輸入和輸出流OutputStream類publicvoidwrite(intb):將int型變量b的低字節(jié)寫入到數(shù)據(jù)流的當(dāng)前位置. publicvoidwrite(byte[]b):將字節(jié)數(shù)組b的b.length個字節(jié)寫入到數(shù)據(jù)流的當(dāng)前位置. publicvoidwrite(byte[]b,intoff,intlen):將字節(jié)數(shù)組b由下標(biāo)off開始,長度為len的字節(jié)數(shù)據(jù)寫到輸出流. publicvoidflush():將緩沖區(qū)中的數(shù)據(jù)寫到外設(shè)并清空緩沖區(qū). publicvoidclose():關(guān)閉輸出流并釋放輸出流占用的資源.165.4輸入和輸出流InputStream類和OutputStream類的常用子類 FileInputStream類和FileOutputStream類:負(fù)責(zé)從本地文件的讀寫數(shù)據(jù). FilterInputStream類和FilterOutputStream類:過濾輸入輸出流,主要能夠?qū)斎胼敵龅臄?shù)據(jù)作類型或格式上的轉(zhuǎn)換,實現(xiàn)了對二進(jìn)制字節(jié)的編碼轉(zhuǎn)換,而它又進(jìn)一步派生出一些具體的子類,如:DataInputStream、DataOutputStream和BufferedInputStream、BufferedOutputStream等. ByteArrayInputStream類和ByteArrayOutputStream類:用于進(jìn)行內(nèi)存數(shù)據(jù)的輸入和輸出。175.5文件和目錄File類publicFile(Stringpathname)創(chuàng)建一個對應(yīng)于參數(shù)pathname的File類對象.參數(shù)pathname是包含目錄和文件名的字符串.如果沒有文件名,則代表目錄.例如, Filefile1=newFile("d:\\javapj\\myinput"); Filefile2=newFile("d:\\javapj\\myinput\\mysys.java");185.5文件和目錄publicFile(Stringparent,Stringchild)
該構(gòu)造函數(shù)將pathname分成兩部分parent和child,參數(shù)parent表示目錄或文件所在路徑,參數(shù)child表示目錄或文件名稱.例如, Filefile1=newFile("d:\\javapj","myinput"); Filefile2=newFile("d:\\javapj\\myinput","mysys.java");195.5文件和目錄publicFile(Fileparent,Stringchild)該構(gòu)造函數(shù)與上面一個的不同之處,在于將parent的參數(shù)類型由String變?yōu)镕ile,代表parent是一個已經(jīng)創(chuàng)建了的File類文件對象(指向目錄).例如, Filefile1=newFile("d:\\javapj\\myinput");Filefile2=newFile(file1,"mysys.java");205.5文件和目錄File類的方法getName():獲得指定文件的名稱getPath()/getAbsolutePath()exists():判斷文件是否存在isFile()/isDiectory()canRead()/canWrite()lastModified()length()delete()createNewFile()mkdir()mkdirs()215.5文件和目錄例1使用File類管理文件和目錄importjava.io.*;public
classfile1{public
static
voidmain(String[]args){Filef=newFile("c:\\abc.txt");if(f.exists()){System.out.println("存在!");}else{try{f.createNewFile();System.out.println("文件已被創(chuàng)建!"); }catch(IOExceptione){}}}}225.5文件和目錄例2使用File類獲得文件屬性importjava.io.*;publicclassFile2{ publicstaticvoidmain(String[]args) { Filef=newFile("I:\\code\\5\\q.txt"); System.out.println(f.isFile()); System.out.println(f.getName()); System.out.println(f.getPath()); }} 235.5文件和目錄練習(xí) 在D盤上創(chuàng)建一個簡單的文本文件,名為dummy.txt.編寫程序,要求輸出該文件的名稱、路徑、字節(jié)數(shù)。245.6文件輸入輸出流FileInputStream類FileInputStream(Stringfilepath)FileInputStream(Filefileobj)例如,F(xiàn)ileInputStreamf1=newFileInputStream(“C:/jdk1.4.2/bin/ex27.java”);Filef=newFile(“C:/jdk1.4.2/bin/ex27.java”);FileInputStreamf1=newFileInputStream(f);255.6文件輸入輸出流例3讀取文件內(nèi)容并顯示importjava.io.*;publicclassFileIn{ publicstaticvoidmain(String[]args)throwsException { Filef=newFile("I:\\code\\5\\q.txt"); FileInputStreamfis=newFileInputStream("I:\\code\\5\\q.txt"); System.out.print("contentoftextis:"); intb; while((b=fis.read())!=-1) { System.out.print((char)b); }}}265.6文件輸入輸出流FileOutputStream類FileOutputStream(StringfilePath)FileOutputStream(FilefileObj)FileOutputStream(FilefileObj,booleanb)275.6文件輸入輸出流例4將程序結(jié)果追加至指定文件importjava.io.*;publicclassFile4{ publicstaticvoidmain(String[]args)throwsException { Filef=newFile("q.txt"); FileOutputStreamfos=newFileOutputStream(f,true); for(inti='a';i<='z';i++) { fos.write(i); } fos.close(); }}285.6文件輸入輸出流思考:如何使用FileInputStream類與FileOutputStream類復(fù)制文件295.7數(shù)據(jù)輸入輸出流DataInputStream和DataOutputStream分別實現(xiàn)了java.io包中的DataInput和DataOutput接口,能夠讀寫Java基本數(shù)據(jù)類型的數(shù)據(jù)和Unicode編碼格式的字符串.這樣,在輸入輸出數(shù)據(jù)時就不必關(guān)心該數(shù)據(jù)究竟包含幾個字節(jié)了. DataInputStream類和DataOutputStream類是從過濾流類繼承過來,這兩個流的對象均不能獨(dú)立地實現(xiàn)數(shù)據(jù)的輸入和輸出處理,必須與其他輸入流與輸出流對象一起使用,才能實現(xiàn)不同類型數(shù)據(jù)的讀寫.305.7數(shù)據(jù)輸入輸出流315.7數(shù)據(jù)輸入輸出流例使用DataInputStream類和DataOutputStream類讀寫格式文件.classStudent{ intsno;Stringname;intage;chargrade;booleansex; publicStudent() { this.sno=0; ="未知"; this.age=0; this.grade='C'; this.sex=true; } publicStudent(intsno,Stringname,intage,chargrade,booleansex) { if(sno>0)this.sno=sno; =name; this.age=age; this.grade=grade; this.sex=sex; }}325.7數(shù)據(jù)輸入輸出流importjava.io.*;publicclassfdsRW{ publicstaticvoidmain(String[]args) { Stringfile="student.dat"; Students1=newStudent(); Students2=newStudent(10,"張飛",16,'A',true); try { FileOutputStreamfo=newFileOutputStream(file); //創(chuàng)建文件輸出流對象 DataOutputStreamout=newDataOutputStream(fo); //創(chuàng)建數(shù)據(jù)輸出流對象 out.writeInt(s1.sno); //寫文件 out.writeUTF(); out.writeInt(s1.age); out.writeChar(s1.grade); out.writeBoolean(s1.sex);335.7數(shù)據(jù)輸入輸出流 out.writeInt(s2.sno); out.writeUTF(); out.writeInt(s2.age); out.writeChar(s2.grade); out.writeBoolean(s2.sex); out.close(); //關(guān)閉數(shù)據(jù)輸出流 fo.close(); //關(guān)閉文件輸出流 System.out.println("文件:"+file+"創(chuàng)建完畢!"); System.out.println("開始讀取文件內(nèi)容:"); FileInputStreamfi=newFileInputStream(file); //創(chuàng)建文件輸入流對象 DataInputStreamin=newDataInputStream(fi); //創(chuàng)建數(shù)據(jù)輸入流對象345.7數(shù)據(jù)輸入輸出流 for(inti=1;i<=2;i++) {//讀取文件內(nèi)容 intsno=in.readInt(); Stringsname=in.readUTF(); intage=in.readInt(); chargrade=in.readChar(); booleansex=in.readBoolean(); System.out.println(sno+"\t"+sname+"\t"+age+"\t"+grade+"\t"+sex); } in.close(); fi.close(); } catch(IOExceptione) { System.out.println(e.toString()); } }}355.8過濾流
1.過濾流:將一個過濾流連接到另一個流上,則在從原始的流讀寫數(shù)據(jù)的同時,利用過濾流可以對這些數(shù)據(jù)進(jìn)行加工處理。2.DataInputStream和DataOutputStream類:它們分別為FilterInputStream和FilterOutputStream類的子類。同時DataInputStream和DataOutputStream類由于分別實現(xiàn)了DataInput和DataOutput接口中定義的獨(dú)立于具體機(jī)器的帶格式的讀寫操作,從而可以實現(xiàn)對Java中的不同類型的基本類型數(shù)據(jù)的讀寫。36importjava.io.*;publicclassJavaFile{ publicstaticvoidmain(Stringargs[]) { intX=100;floatY=3.14f; try { FileOutputStreamfos=newFileOutputStream("data.dat"); DataOutputStreamdos=newDataOutputStream(fos); dos.writeInt(X); dos.writeFloat(Y); dos.close(); } catch(FileNotFoundExceptione){ } catch(IOExceptione){ }}}帶格式的寫操作5.8過濾流37importjava.io.*;publicclassJavaFile{ publicstaticvoidmain(Stringargs[]) { intX; floatY;try{FileInputStreamfis=newFileInputStream("data.dat");DataInputStreamdis=newDataInputStream(fis); X=dis.readInt(); Y=dis.readFloat(); dis.close(); System.out.println("X="+X); Sy
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 鋼鐵廠租賃協(xié)議
- 水利工程清包工施工合同
- 工業(yè)園區(qū)照明改造合同
- 建筑綠化施工圖設(shè)計合同模板
- 橡膠廠原料吊籃租賃合同
- 陶瓷制品加工廠合同
- 旅游地產(chǎn)交易補(bǔ)充協(xié)議
- 內(nèi)衣襪子訂貨合同范例
- 山東物流設(shè)施建設(shè)合同
- 建筑施工合同裝配式建筑生產(chǎn)
- 電子營業(yè)執(zhí)照下載確認(rèn)書
- CA6140撥叉831002課程設(shè)計工序卡
- 全國醫(yī)療服務(wù)價格項目規(guī)范(2012年版)
- MATLAB論文基于MATLAB的自動控制系統(tǒng)及案例分析
- 化學(xué)元素周期表word版(可打印)
- 車友會活動策劃方案PPT
- 英語演講稿——Healthy Lifestyle
- 法院立案送達(dá)地址確認(rèn)書
- 電氣設(shè)備拆除工程施工方案
- GB_T 20981-2021 面包質(zhì)量通則(高清-現(xiàn)行)
- 企業(yè)標(biāo)準(zhǔn)化管理辦法
評論
0/150
提交評論