Java PPT第六章輸入輸出流.ppt
《Java PPT第六章輸入輸出流.ppt》由會員分享,可在線閱讀,更多相關《Java PPT第六章輸入輸出流.ppt(25頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1,第六章輸入輸出流,2,6.1輸入輸出基礎,在Java語言中,輸入與輸出完全基于“流”這個概念。Java輸入輸出的流式接口為復雜而繁重的I/O編程任務提供了一個簡潔的抽象。,一、流的概念Java程序通過流來完成輸入/輸出。流通過Java的輸入/輸出系統(tǒng)與物理設備鏈接。輸入流能夠抽象多種不同類型的輸入:從磁盤文件、從鍵盤或從網(wǎng)絡套接字。同樣,一個輸出流可以輸出到控制臺,磁盤文件或相連的網(wǎng)絡。二、字節(jié)流和字符流在Java2中,定義了兩種類型的流:字節(jié)類和字符類。1.字節(jié)流字節(jié)流(bytestream)為處理字節(jié)的輸入和輸出提供了方便的方法??梢允褂米止?jié)流讀取或書寫二進制數(shù)據(jù)。,3,字節(jié)流由兩個類層次結構定義。在頂層有兩個抽象類:InputStream和OutputStream。這兩個抽象類定義了實現(xiàn)其他流類的關鍵方法。最重要的兩種方法是read()和write(),它們分別對數(shù)據(jù)的字節(jié)進行讀寫,這兩種方法在InputStream和OutputStream中被定義為抽象方法,它們都被派生的流類重載。下面是幾個常用的具體的字節(jié)流類:BufferedInputStream:緩沖輸入流BufferedOutputStream:緩沖輸出流FileInputStream:讀取文件的輸入流FileOutputStream:寫文件的輸出流InputStream:描述流輸入的抽象類OutputStream:描述流輸出的抽象類PrintStream:包含print()和println()的輸出流RandomAccessFile:支持隨機文件輸入/輸出,4,2.字符流字符流(characterstream)為字符的輸入和輸出處理提供了方便。字符流的頂層有兩個抽象類:Reader和Writer。這兩個抽象類定義了實現(xiàn)其他流類的關鍵方法。最重要的兩種方法是read()和write(),它們分別進行字符的讀寫,都被派生的流類重載。下面是幾個常用的具體的字符流類:BufferedReader:緩沖輸入字符流BufferedWriter:緩沖輸出字符流FileReader:讀取文件的輸入流FileWriter:寫文件的輸出流InputStreamReader:把字節(jié)轉換成字符的輸入流LineNumberReader:計算行數(shù)的輸入流OutputStreamWriter:把字符轉換成字節(jié)的輸出流PrintWriter:包含print()和println()的輸出流Reader:描述字符流輸入的抽象類Writer:描述字符流輸出的抽象類,5,三、預定義流所有的Java程序運行時自動導入java.lang包,這個包定義了一個名為System的類,該類封裝了運行時環(huán)境的多個方面。System還包含有3個預定義的字節(jié)流變量in、out和err。他們的定義如下:publicstaticInputStreamin;publicstaticPrintStreamout;publicstaticPrintStreamerr;,6,6.2控制臺輸入輸出,一、控制臺輸入1.BufferedReader緩沖輸入字符流類在Java2中,讀取控制臺輸入的首選方法應該是字符流,它使程序容易符合國際標準,并且易于維護。控制臺輸入由從System.in讀取數(shù)據(jù)來完成。BufferedReader的構造函數(shù)用法如下:BufferedReader(ReaderinputReader)其中,inputReader是鏈接被創(chuàng)建的BufferedReader實例的流。Reader是一個抽象的類,InputStreamReader是Reader的一個具體子類,該子類將字節(jié)轉換成字符。InputStreamReader的構造函數(shù)為:InputStreamReader(InputStreaminputStream)可以這樣使用:InputStreamReader(System.in),7,綜上所述,下面的代碼創(chuàng)建了與鍵盤相連的BufferedReader對象:BufferedReaderbr=newBufferedReader(newInputStreamReader(System.in))2.BufferedReader中重載方法read()和readLine()read()方法intread()throwsIOException該方法每次執(zhí)行都從輸入流中讀取一個字符,然后以整型形式返回。當遇到流的尾時,返回-1。readLine()方法StringreadLine()throwsIOException該方法每次執(zhí)行從輸入流中讀取一行字符,然后以String形式返回。當遇到流的尾時,返回null。,8,importjava.io.*;publicclassinputFIS{publicstaticvoidmain(Stringargs[]){BufferedReaderss=newBufferedReader(newInputStreamReader(System.in));Strings,input;inta;floatb;charc;try{input=ss.readLine();s=input;a=Integer.parseInt(input);b=Float.parseFloat(input);c=(char)ss.read();,必須進行強制類型轉換,9,System.out.println(s);System.out.println(a);System.out.println(b);System.out.println(c);}catch(IOExceptione){System.out.println("therearesomewronginI/O");}}},注:捕獲的異常類型是Exception時,若輸入數(shù)據(jù)不符合parse方法的參數(shù)要求,該異常會被捕獲到。捕獲的異常類型是IOException時,若輸入的數(shù)據(jù)不符合parse方法的參數(shù)要求,該異常不會被捕獲到,出現(xiàn)運行時錯誤。,異常類型可以是Exception,10,程序運行時,從鍵盤輸入:1234(若輸入非數(shù)字串則有運行錯誤)wrh輸出1234字符串1234整型數(shù)據(jù)1234.0實型數(shù)據(jù)w字符型數(shù)據(jù),11,3.每行輸入多個數(shù)據(jù)項上面的例子采用逐行讀取字符的方法,然后把每行數(shù)據(jù)作為輸入賦給一個變量。如果希望每行數(shù)據(jù)包含多個子數(shù)據(jù)項,Java提供了專門的類StringTokenizer來分解一個包含分隔符號的大的字符串。用法如下:StringTokenizerst=newStringTokenizer(line,“:”)這里的字符串line的分隔符指定為“:”。也可指定多個分隔符,如果未指定分隔符,則使用缺省分隔符,即“空格”,“TAB”,”回車”。StringTokenizerst=newStringTokenizer(line)StringTokenizer有兩個方法,nextToken()返回下一個標記,hasMoreTokens()返回后面是否還有標記。,12,importjava.io.*;importjava.util.*;publicclassinputFIS{publicstaticvoidmain(Stringargs[]){BufferedReaderss=newBufferedReader(newInputStreamReader(System.in));Strings,input;//暫時容納輸入數(shù)據(jù)的臨時字符串數(shù)組Stringfield[]=newString[4];inta,fieldcount=0;floatb;charc;,13,try{input=ss.readLine();//讀取一行StringTokenizerst=newStringTokenizer(input,":");while(st.hasMoreTokens()){field[fieldcount]=st.nextToken();fieldcount++;}s=field[0];a=Integer.parseInt(field[1]);b=Float.parseFloat(field[2]);c=(char)ss.read();System.out.println(s);System.out.println(a);System.out.println(b);System.out.println(c);}catch(IOExceptione){System.out.println("therearesomewronginI/O");}}},14,二、控制臺輸出,Java使用System.out向控制臺寫數(shù)據(jù),這種寫數(shù)據(jù)方式是字節(jié)流的方式,另外,Java還提供基于字符的寫操作,這個類是PrintWriter.PrintWriter定義了多個構造函數(shù),下面是常用的一個:PrintWriter(OutputStreamoutputStream,BooleanflushOnNewline)其中,flushOnNewline控制Java是否在println()方法被調(diào)用時刷新輸出流。如果flushOnNewline為true,刷新自動發(fā)生,否則,則不發(fā)生。,15,importjava.io.*;classPrintWriterDemo{publicstaticvoidmain(Stringargs[]){PrintWriterpw=newPrintWriter(System.out,true);Strings="thisisatest";inti=-7;floatf=23.4f;pw.println(s);pw.println(i);pw.println(f);}},16,例:從鍵盤上輸入任意兩個整數(shù),求它們的和。,importjava.io.*;publicclassInputDemo{publicstaticvoidmain(Stringargs[]){BufferedReaderread=newBufferedReader(newInputStreamReader(System.in));PrintWriterpw=newPrintWriter(System.out,true);inta,b,c;try{a=Integer.parseInt(read.readLine());b=Integer.parseInt(read.readLine());c=a+b;pw.println("c="+c);}catch(IOExceptione){pw.println("therearesomeerrors");}}},17,6.3文件的讀寫,一、常用的類對文件的讀寫操作和標準輸入輸出是十分類似的,需要注意的是要采用專門對文件操作的流,并應在合適的時候關閉流,否則系統(tǒng)資源無法得到釋放。對文件操作時,其輸入輸出流分別是FileReader和FileWriter。二、舉例例1:創(chuàng)建文件,即從鍵盤上輸入數(shù)據(jù),寫入磁盤文件。,18,importjava.io.*;importjava.util.*;classFileW{publicstaticvoidmain(Stringargs[]){personpeople=newperson();Stringread;inti;BufferedReaderinput=newBufferedReader(newInputStreamReader(System.in));try{PrintWriterout=newPrintWriter(newFileWriter("e:/java/file/people.dat"));,19,for(i=0;i<3;i++){read=input.readLine();people.name=read;read=input.readLine();people.age=Integer.parseInt(read);read=input.readLine();people.id=read;out.println(people.name+""+people.age+""+people.id);}out.close();}catch(IOExceptione){System.out.println("ErrorforcreateFile");}}},20,classperson{publicStringname;publicintage;publicStringid;},21,例2:從文件中讀出數(shù)據(jù),importjava.io.*;importjava.util.*;classFileR{publicstaticvoidmain(Stringargs[]){Stringread;try{BufferedReaderinput=newBufferedReader(newFileReader("e:/java/file/people.dat"));read=input.readLine();while(!read.equals(null)){System.out.println(read);read=input.readLine();}input.close();},22,catch(IOExceptione){System.out.println("thefileisnotfound");}catch(NullPointerExceptione){return;}}},23,6.4File類,File類直接處理文件和文件系統(tǒng),它描述了文件本身的屬性,例如:權限、時間、日期和目錄路徑。File類有三個構造函數(shù)。如下:File(StringdirectoryPath);File(StringdirectoryPath,Stringfilename);File(Filedirobj,Stringfilename);,24,importjava.io.File;classFileDemo{staticvoidp(Strings){System.out.println(s);}publicstaticvoidmain(Stringargs[]){Filef1=newFile("e:/java/file/people.dat");p("FileName:"+f1.getName());p("Path:"+f1.getPath());p("abcPath:"+f1.getAbsolutePath());p("Parent:"+f1.getParent());p(f1.canWrite()?"iswriteable":"isnotwriteable");p(f1.canRead()?"isreadable":"isnotreadable");p("filelastmodified:"+f1.lastModified());p("Filesize:"+f1.length()+"Bytes");}},25,輸出結果如下:,- 配套講稿:
如PPT文件的首頁顯示word圖標,表示該PPT已包含配套word講稿。雙擊word圖標可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國旗、國徽等圖片,僅作為作品整體效果示例展示,禁止商用。設計者僅對作品中獨創(chuàng)性部分享有著作權。
- 關 鍵 詞:
- Java PPT第六章輸入輸出流 PPT 第六 輸入輸出
裝配圖網(wǎng)所有資源均是用戶自行上傳分享,僅供網(wǎng)友學習交流,未經(jīng)上傳用戶書面授權,請勿作他用。
鏈接地址:http://m.jqnhouse.com/p-11496715.html