




已閱讀5頁(yè),還剩51頁(yè)未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
7Java輸入輸出系統(tǒng),內(nèi)容,什么是流流的分類字節(jié)流,字符流,處理流文件IO操作文件類File標(biāo)準(zhǔn)輸入輸出對(duì)象的序列化,什么是流?,Stream,Stream,Stream,Stream,Astreamisapathofinformationfromasourcetoadestination,.doc.txt,什么是流?,程序設(shè)計(jì)語(yǔ)言借用水流、電流等概念,將流動(dòng)的數(shù)據(jù)稱為“流”。流可以有各種來(lái)源和目的地,如標(biāo)準(zhǔn)輸入輸出、文件、網(wǎng)絡(luò)等,也可以有各種不同的用途和處理方法,因而有許多分類。Java關(guān)于流的設(shè)計(jì)思想是:提供各種不同的流類,由程序員進(jìn)行組合使用,以提供最大的靈活性。,流的功能概述,Java提供了不同的流類以實(shí)現(xiàn)如下的功能標(biāo)準(zhǔn)輸入輸出文件輸入輸出文本文件/二進(jìn)制文件順序讀寫/隨機(jī)讀寫java.nio包進(jìn)一步提供了異步數(shù)據(jù)讀寫、內(nèi)存映射文件、文件鎖等功能網(wǎng)絡(luò)數(shù)據(jù)讀寫將對(duì)象存儲(chǔ)為流/從流中讀取對(duì)象,稱為對(duì)象的序列化或串行化(Serialization),流的分類,java.io包提供了多個(gè)流類來(lái)實(shí)現(xiàn)輸入輸出功能:按照數(shù)據(jù)流的方向不同分為輸入流和輸出流按照處理數(shù)據(jù)單位的不同分為字節(jié)流和字符流按照功能不同可以分為節(jié)點(diǎn)流和處理流(或者稱過(guò)濾流,F(xiàn)ilter),流的分類,InputStream,OutputStream,Reader,Writer,ByteStreams,CharacterStreams,讀寫以字節(jié)為單位進(jìn)行,讀寫以字符為單位進(jìn)行,流的分類,節(jié)點(diǎn)流(nodestream)對(duì)指定的地方(磁盤文件、內(nèi)存等)讀/寫處理流(filterstream)一個(gè)處理流使用節(jié)點(diǎn)流作為輸入或輸出。,目的地,數(shù)據(jù)源,InputStream的分類,InputStream是字節(jié)輸入流。它的幾種輸入源可以是:1.一個(gè)字節(jié)數(shù)組2.一個(gè)文件3.一個(gè)管道,InputStream的分類,常用的InputStream流有下列幾個(gè):ByteArrayInputStreamFileInputStreamPipedInputStream,/把字節(jié)數(shù)組轉(zhuǎn)換為輸入流,/從文件中讀取數(shù)據(jù),/連接一個(gè)PipedOutputStream,InputStream的方法,InputStream的常用方法:publicabstractintread()throwsIOExceptionpublicintread(bytedata)throwsIOExceptionpublicintread(bytedata,intoffset,intlength)throwsIOExceptionpubliclongskip(longn)throwsIOExceptionpublicintavailable()throwsIOExceptionpublicvoidclose()throwsIOExceptionpublicvoidmark(intreadlimit)publicvoidreset()throwsIOExceptionpublicbooleanmarkSupported(),OutputStream的分類,OutputStream是字節(jié)輸出流。它的幾種輸出目的地可以是:1.一個(gè)字節(jié)數(shù)組2.一個(gè)文件3.一個(gè)管道,OutputStream的分類,常用的OutputStream流有下列幾個(gè):ByteArrayOutputStreamFileOutputStreamPipedOutputStream,OutputStream的方法,OutputStream的常用方法:publicabstractvoidwrite(intb)throwsIOExceptionpublicvoidwrite(bytedata)throwsIOExceptionpublicvoidwrite(bytedata,intoffset,intlength)throwsIOExceptionpublicvoidflush()throwsIOExceptionpublicvoidclose()throwsIOException,字節(jié)流示例,TestFileInputStream.javaTestFileOutputStream.java,Reader3.PrintWriterout=newPrintWriter(4.newBufferedWriter(5.newFileWriter(out.txt);6.Strings;7.inti=1;8.while(s=in.readLine()!=null)9.out.println(line+i+=+s);10.i+;11.12.in.close();13.out.close();14.catch(FileNotFoundExceptione)15.System.err.println(cannotopenin.txt);16.catch(IOExceptione)17.System.err.println(I/Oexception);18.,FileIO.java代碼,例1:文件I/O舉例,firstsecondthirdforthfifthsixthseventh,line1=firstline2=secondline3=thirdline4=forthline5=fifthline6=sixthline7=seventh,正確運(yùn)行后,例1:文件I/O舉例,如果在當(dāng)前目錄下沒有in.txt文件,則運(yùn)行返回結(jié)果如下:,例2:DataOutputStream舉例,這個(gè)例子使用DataOutputStream過(guò)濾流,生成一個(gè)文件。,Stream,1.importjava.io.*;2.publicclassDataIODemo3.publicstaticvoidmain(Stringargs)4.tryDataOutputStreamout=newDataOutputStream(newFileOutputStream(text.dat);7.doubleprices=6.55,9.99,1.8,2.33,0.90;8.intunits=12,9,5,6,7;Stringdescs=chicken,beef,lettuce,potato,tomato;10.for(inti=0;iprices.length;i+)11.out.writeDouble(pricesi);out.writeChar(t);12.out.writeInt(unitsi);out.writeChar(t);13.out.writeChars(descsi);out.writeChar(n);14.15.out.close();16.catch(IOExceptione)17.18.,DataIODemo.java,例3:DataInputStream舉例,這個(gè)例子使用DataInputStream過(guò)濾流。讀取例2生成的文件。,Stream,1.importjava.io.*;2.publicclassDataIODemo23.publicstaticvoidmain(Stringarg)4.DataInputStreamin=null;5.try6.in=newDataInputStream(newFileInputStream(text.dat);7.doubleprice,total=0.0;8.intunit;charch;StringBufferdesc;9.while(true)10.price=in.readDouble();in.readChar();11.unit=in.readInt();in.readChar();12.desc=newStringBuffer(20);13.while(ch=in.readChar()!=n)14.desc.append(ch);15.total=price*unit;16.System.out.println(youordered:+desc17.+t+price+*+unit+=+total);18.19.,DataIODemo2.java,接上頁(yè)20.catch(EOFExceptione)21.try22.in.close();23.catch(IOExceptione1)24.25.catch(IOExceptione)26.27.,DataIODemo2.java,File類,java.io.File類提供文件與目錄的各種有用信息File類并不打開文件,也不處理文件內(nèi)容例:Filef1=newFile(/etc/passwd);Filef2=newFile(/etc,passwd);File類的對(duì)象經(jīng)常作為文件流類構(gòu)造方法的參數(shù),File類,通過(guò)方法exists()判斷文件或路徑是否存在創(chuàng)建了類File的實(shí)例對(duì)象,并不等價(jià)于在硬盤上創(chuàng)建該文件FileOutputStream在刪除文件內(nèi)容時(shí),沒有警告信息File的實(shí)例對(duì)象可以判斷出文件是否存在,提供警告信息,或改變打開文件方式,路徑或文件名中的分隔符,分隔符分隔路徑中的目錄名、子目錄名以及文件名/(Unix)或(Windows)這兩種分隔符Java均可以識(shí)別在字符串常量中用/或最正規(guī)的方法是使用File.separator靜態(tài)字段,File類示例,TestFile.java,格式化文本輸出,格式化文本輸出類:PrintStream和PrintWriter前者將所有字符按照平臺(tái)默認(rèn)的字符編碼轉(zhuǎn)換為字節(jié),后者直接寫入字符這兩個(gè)類提供了print(),println(),printf()等常用方法以方便格式化輸出這兩個(gè)類的一個(gè)重要特點(diǎn)是輸出時(shí)不拋出IOException示例:TestPrintStream1.java/TestPrintStream2.java,標(biāo)準(zhǔn)輸入輸出,標(biāo)準(zhǔn)輸入默認(rèn)是指從鍵盤輸入,Java用System.in來(lái)指向系統(tǒng)的標(biāo)準(zhǔn)輸入System.in的類型是InputStream,其重要的方法是read()現(xiàn)在更方便的做法是使用Scanner類由于歷史的原因,System.out的類型是PrintStream,而不是PrintWriter,其重要方法有print()、println()、write()、flush()等,如何讀取文本文件中的數(shù)據(jù),如果不必按行分析,可直接使用Scanner如果需要按行分析數(shù)據(jù),且每行的數(shù)據(jù)不一樣多,可利用BufferedReader套在FileReader上,利用前者的readLine()讀取一行,然后利用所讀取的一行字符串構(gòu)造Scanner對(duì)象進(jìn)行處理;或者用String類的split()方法分解這一行,然后用各個(gè)基本數(shù)據(jù)類型封裝類的ParseXxx()方法進(jìn)行轉(zhuǎn)換也可以使用Scanner的nextLine()方法,讀取一行,然后對(duì)這一行作上述的分析,小專題,實(shí)驗(yàn),假設(shè)文本文件abc1.txt中有一些數(shù)據(jù),分為若干行,每行有一些個(gè)數(shù)不等的整數(shù),用空格隔開。寫一個(gè)程序讀入該文件中的數(shù)據(jù),對(duì)每行數(shù)據(jù)從小到大進(jìn)行排序,然后按行輸出到文本文件abc2.txt中,輸出的文件中數(shù)據(jù)的格式與輸入文件相同。,123577451234567912118901-11234567890-45-1543216713345678999811111111111,文件IO小結(jié),二進(jìn)制數(shù)據(jù)輸入輸出,用DataInputStream/DataOutputStream(二進(jìn)制)隨機(jī)文件讀寫,用RandomAccessFile文本數(shù)據(jù)格式化輸出,用PrintWriter文本數(shù)據(jù)輸入,可以用Scanner類,或者用BufferedReader讀入一行,然后用String類的split()方法分解這一行,然后用各個(gè)基本數(shù)據(jù)類型封裝類的ParseXxx()方法進(jìn)行轉(zhuǎn)換,*綜合示例,TextFileTest.javaRandomFileTest.java,對(duì)象序列化,Java提供一種機(jī)制,能夠?qū)?nèi)存中存在的對(duì)象轉(zhuǎn)化為流,以便保存到文件中,或者通過(guò)網(wǎng)絡(luò)進(jìn)行傳輸?shù)鹊?。這種機(jī)制稱為序列化。Java利用ObjectInputStream類和ObjectOutputStream類創(chuàng)建對(duì)象輸入流和對(duì)象輸出流。對(duì)象輸出流使用writeObject(Objectobj)方法將一個(gè)對(duì)象obj寫入輸出流送往目的地,對(duì)象輸入流使用readObject()從源中讀取一個(gè)對(duì)象到程序中。ObjectInputStream類和ObjectOutputStream類的構(gòu)造方法分別是:ObjectInputStream(InputStreamin),ObjectOutputStream(OutputStreamout)。,Serializable接口,一個(gè)類的對(duì)象若要進(jìn)行序列化,必須實(shí)現(xiàn)Serializable接口。Serializable接口沒有任何方法,是一個(gè)標(biāo)記接口(JDK5.0以后,要求實(shí)現(xiàn)了Serializable接口的類提供一個(gè)serialV
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年中國(guó)卷式記錄紙市場(chǎng)調(diào)查研究報(bào)告
- 離婚協(xié)議反駁協(xié)議書模板
- DB33T 1381-2024工業(yè)企業(yè)標(biāo)準(zhǔn)化統(tǒng)計(jì)調(diào)查規(guī)范
- 租賃砂石料協(xié)議書范本
- 建房轉(zhuǎn)讓合同協(xié)議
- 掛靠營(yíng)銷公司協(xié)議書
- 私人車位轉(zhuǎn)租合同協(xié)議
- 外包項(xiàng)目服務(wù)合同協(xié)議
- 監(jiān)控值守外包合同協(xié)議
- 課程與教學(xué)目標(biāo)設(shè)計(jì)
- 2022年12月18日浙江?。ㄊ校┘?jí)機(jī)關(guān)面向基層遴選筆試真題及答案深度解析
- 慢性血栓栓塞性肺動(dòng)脈高壓
- 兒童早期綜合發(fā)展課件
- 剪力墻平法識(shí)圖講義(PPT格式105)
- 北京中考英語(yǔ)詞匯表(1600詞匯)
- 專業(yè)工程分包業(yè)主審批表
- 藥劑科終止妊娠藥品管理制度
- 除草劑分類和使用方法
- 中遠(yuǎn)集團(tuán)養(yǎng)老保險(xiǎn)工作管理程序
- 留守兒童幫扶記錄表
- 變電站第二種工作票
評(píng)論
0/150
提交評(píng)論