Java輸入輸出系統(tǒng).ppt_第1頁
Java輸入輸出系統(tǒng).ppt_第2頁
Java輸入輸出系統(tǒng).ppt_第3頁
Java輸入輸出系統(tǒng).ppt_第4頁
Java輸入輸出系統(tǒng).ppt_第5頁
已閱讀5頁,還剩51頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

7Java輸入輸出系統(tǒng),內(nèi)容,什么是流流的分類字節(jié)流,字符流,處理流文件IO操作文件類File標準輸入輸出對象的序列化,什么是流?,Stream,Stream,Stream,Stream,Astreamisapathofinformationfromasourcetoadestination,.doc.txt,什么是流?,程序設計語言借用水流、電流等概念,將流動的數(shù)據(jù)稱為“流”。流可以有各種來源和目的地,如標準輸入輸出、文件、網(wǎng)絡等,也可以有各種不同的用途和處理方法,因而有許多分類。Java關于流的設計思想是:提供各種不同的流類,由程序員進行組合使用,以提供最大的靈活性。,流的功能概述,Java提供了不同的流類以實現(xiàn)如下的功能標準輸入輸出文件輸入輸出文本文件/二進制文件順序讀寫/隨機讀寫java.nio包進一步提供了異步數(shù)據(jù)讀寫、內(nèi)存映射文件、文件鎖等功能網(wǎng)絡數(shù)據(jù)讀寫將對象存儲為流/從流中讀取對象,稱為對象的序列化或串行化(Serialization),流的分類,java.io包提供了多個流類來實現(xiàn)輸入輸出功能:按照數(shù)據(jù)流的方向不同分為輸入流和輸出流按照處理數(shù)據(jù)單位的不同分為字節(jié)流和字符流按照功能不同可以分為節(jié)點流和處理流(或者稱過濾流,F(xiàn)ilter),流的分類,InputStream,OutputStream,Reader,Writer,ByteStreams,CharacterStreams,讀寫以字節(jié)為單位進行,讀寫以字符為單位進行,流的分類,節(jié)點流(nodestream)對指定的地方(磁盤文件、內(nèi)存等)讀/寫處理流(filterstream)一個處理流使用節(jié)點流作為輸入或輸出。,目的地,數(shù)據(jù)源,InputStream的分類,InputStream是字節(jié)輸入流。它的幾種輸入源可以是:1.一個字節(jié)數(shù)組2.一個文件3.一個管道,InputStream的分類,常用的InputStream流有下列幾個:ByteArrayInputStreamFileInputStreamPipedInputStream,/把字節(jié)數(shù)組轉換為輸入流,/從文件中讀取數(shù)據(jù),/連接一個PipedOutputStream,InputStream的方法,InputStream的常用方法:publicabstractintread()throwsIOExceptionpublicintread(bytedata)throwsIOExceptionpublicintread(bytedata,intoffset,intlength)throwsIOExceptionpubliclongskip(longn)throwsIOExceptionpublicintavailable()throwsIOExceptionpublicvoidclose()throwsIOExceptionpublicvoidmark(intreadlimit)publicvoidreset()throwsIOExceptionpublicbooleanmarkSupported(),OutputStream的分類,OutputStream是字節(jié)輸出流。它的幾種輸出目的地可以是:1.一個字節(jié)數(shù)組2.一個文件3.一個管道,OutputStream的分類,常用的OutputStream流有下列幾個: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,正確運行后,例1:文件I/O舉例,如果在當前目錄下沒有in.txt文件,則運行返回結果如下:,例2:DataOutputStream舉例,這個例子使用DataOutputStream過濾流,生成一個文件。,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舉例,這個例子使用DataInputStream過濾流。讀取例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,接上頁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類的對象經(jīng)常作為文件流類構造方法的參數(shù),File類,通過方法exists()判斷文件或路徑是否存在創(chuàng)建了類File的實例對象,并不等價于在硬盤上創(chuàng)建該文件FileOutputStream在刪除文件內(nèi)容時,沒有警告信息File的實例對象可以判斷出文件是否存在,提供警告信息,或改變打開文件方式,路徑或文件名中的分隔符,分隔符分隔路徑中的目錄名、子目錄名以及文件名/(Unix)或(Windows)這兩種分隔符Java均可以識別在字符串常量中用/或最正規(guī)的方法是使用File.separator靜態(tài)字段,File類示例,TestFile.java,格式化文本輸出,格式化文本輸出類:PrintStream和PrintWriter前者將所有字符按照平臺默認的字符編碼轉換為字節(jié),后者直接寫入字符這兩個類提供了print(),println(),printf()等常用方法以方便格式化輸出這兩個類的一個重要特點是輸出時不拋出IOException示例:TestPrintStream1.java/TestPrintStream2.java,標準輸入輸出,標準輸入默認是指從鍵盤輸入,Java用System.in來指向系統(tǒng)的標準輸入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()讀取一行,然后利用所讀取的一行字符串構造Scanner對象進行處理;或者用String類的split()方法分解這一行,然后用各個基本數(shù)據(jù)類型封裝類的ParseXxx()方法進行轉換也可以使用Scanner的nextLine()方法,讀取一行,然后對這一行作上述的分析,小專題,實驗,假設文本文件abc1.txt中有一些數(shù)據(jù),分為若干行,每行有一些個數(shù)不等的整數(shù),用空格隔開。寫一個程序讀入該文件中的數(shù)據(jù),對每行數(shù)據(jù)從小到大進行排序,然后按行輸出到文本文件abc2.txt中,輸出的文件中數(shù)據(jù)的格式與輸入文件相同。,123577451234567912118901-11234567890-45-1543216713345678999811111111111,文件IO小結,二進制數(shù)據(jù)輸入輸出,用DataInputStream/DataOutputStream(二進制)隨機文件讀寫,用RandomAccessFile文本數(shù)據(jù)格式化輸出,用PrintWriter文本數(shù)據(jù)輸入,可以用Scanner類,或者用BufferedReader讀入一行,然后用String類的split()方法分解這一行,然后用各個基本數(shù)據(jù)類型封裝類的ParseXxx()方法進行轉換,*綜合示例,TextFileTest.javaRandomFileTest.java,對象序列化,Java提供一種機制,能夠將內(nèi)存中存在的對象轉化為流,以便保存到文件中,或者通過網(wǎng)絡進行傳輸?shù)鹊?。這種機制稱為序列化。Java利用ObjectInputStream類和ObjectOutputStream類創(chuàng)建對象輸入流和對象輸出流。對象輸出流使用writeObject(Objectobj)方法將一個對象obj寫入輸出流送往目的地,對象輸入流使用readObject()從源中讀取一個對象到程序中。ObjectInputStream類和ObjectOutputStream類的構造方法分別是:ObjectInputStream(InputStreamin),ObjectOutputStream(OutputStreamout)。,Serializable接口,一個類的對象若要進行序列化,必須實現(xiàn)Serializable接口。Serializable接口沒有任何方法,是一個標記接口(JDK5.0以后,要求實現(xiàn)了Serializable接口的類提供一個serialV

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論