第七講 輸入輸出流_第1頁
第七講 輸入輸出流_第2頁
第七講 輸入輸出流_第3頁
第七講 輸入輸出流_第4頁
第七講 輸入輸出流_第5頁
已閱讀5頁,還剩49頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第七講輸入輸出流學(xué)習(xí)要求理解Java語言的輸入/輸出處理方式掌握文件的處理、字節(jié)流和字符流的處理能夠熟練的使用常用的處理輸入和輸出的類1第七講輸入輸出流本章基本內(nèi)容File類文件隨機(jī)讀寫輸入輸出流字節(jié)流字符流2File類是IO包中唯一代表磁盤文件本身信息的類,而不是文件中的內(nèi)容。File類定義了一些與平臺無關(guān)的方法來操縱文件,例:創(chuàng)建、刪除文件和重命名文件。3File類Java中的目錄被當(dāng)作一種特殊的文件使用,list方法可以返回目錄中的所有子目錄和文件名。在Unix下的路徑分隔符為/,在DOS下的路徑分隔符為\,Java可以正確處理Unix和DOS的路徑分隔符4File類

File類的功能十分強(qiáng)大,它可以訪問指定文件的所有屬性,包括文件名稱、文件長度、文件的最后修改時間等,同時還可以利用File類來建立文件對象、刪除文件和改變文件名稱等。5File類創(chuàng)建文件對象有三種構(gòu)造方法:File(Stringpathname);File(Stringpathname,Stringname);File(Filedir,Stringname);6File類參數(shù)說明:

Stringpathname---給定的文件對象的路徑,可以使絕對路徑也可以是相對路徑;Stringname---文件名;Stringdir---抽象路徑名;7File類這三種方法只是生成一個文件對象,但是沒有生成真正的文件,如果要生成實在的文件,需調(diào)用createNewFile()方法。如果在指定的路徑中生成一個文件夾需調(diào)用mkdir()方法。要將建一個文件或者目錄,該文件或目錄的上一級目錄必須事先就要存在。8File類File類中提供的有關(guān)文件名處理的方法:publicStringgetName()

//獲得文件名,但不包含文件所在的路徑publicStringgetPath()//用于獲得文件的相對路徑publicStringgetAbsolutePath()//返回文件絕對路徑publicStringgetParent()

//返回文件的上一級目錄的名稱9File類publicbooleanrenameTo(Filedest)

//重命名文件PublicintcompareTo(Filepathname)

//按字母順序比較兩個抽象路徑名publicnativebooleanisAbsolute()

//如果文件名為絕對名則返回真10File類File類中提供的有關(guān)文件屬性測試方面的方法:publicbooleanisFile()

//用于測試當(dāng)前文件對象是不是文件publicbooleanisDirectory()

//判斷當(dāng)然文件對象是否是目錄publicbooleanexists()

//判斷文件是否存在11File類publicbooleancanWrite()//判斷文件是否可寫publicbooleancanRead()//判斷文件是否可讀publicStringsetReaeOnly()

//將當(dāng)前文件對象設(shè)置為只讀publiclonglength()

//用于獲得當(dāng)前文件的長度以字節(jié)為單位12File類File類中提供的有關(guān)文件操作方面的方法:publicbooleanmkdir()

//創(chuàng)建此抽象路徑名指定的目錄publicbooleanmkdirs()

/*創(chuàng)建此抽象路徑名指定的目錄,包括所有必需但不存在的父目錄。注意,此操作失敗時也可能已經(jīng)成功地創(chuàng)建了一部分必需的父目錄。*/

13File類File類publicbooleancreateNewFile()

//根據(jù)當(dāng)前的文件對象創(chuàng)建一個新的文件publicbooleandelete()//刪除當(dāng)前文件publicString[]list()

//列出當(dāng)前目錄下的所有文件和目錄publicString[]list(FilenameFilterfilter)

//列出目錄下的指定類型文件例:creatFile.java,F(xiàn)ileList.java14文件過濾接口查看目錄中的文件信息時,如果只希望看一部分文件,可以指定一個過濾條件。該功能需要使用過濾器接口和File類的方法共同完成。Java提供FileFilter和FilenameFilter兩個接口實現(xiàn)對文件名字字符串的過濾,他們都聲明accept()方法實現(xiàn)過濾操作。15文件過濾接口FileFilter和FilenamFilter接口PublicinterfaceFileFilter

{

publicbooleanaccept(Filepathname)

}PublicinterfaceFilenameFilter

{publicbooleanaccept(Filedir,Stringfilename)}16文件過濾接口獲得文件列表時,使用過濾器publicString[]list(FilenameFilterfilter)

//返回過濾后的文件列表publicFile[]listFiles(FilenameFilterfilter)publicFile[]listFiles(FilenameFilterfilter)參數(shù)filter是一個實現(xiàn)了指定過濾器接口的對象,該對象包含accept()方法實現(xiàn)。。

17文件過濾接口當(dāng)調(diào)用list(filter)或listFiles(filter)方法時首先獲得全部文件列表,再對這個列表按指定條件進(jìn)行過濾,即對全部列表中的每個數(shù)據(jù)項調(diào)用執(zhí)行filter的accept()方法。若accept()返回true,則相應(yīng)數(shù)據(jù)項保留在列表中,否則從列表中刪除。例:DirFilt.java18文件隨機(jī)讀寫從文件的任意一個位置開始讀寫。用RandomAccessFile類實現(xiàn)文件的隨機(jī)讀寫。一般的流中,文件指針只能順序移動,RandomAccessFile可以任意移動文件指針。19創(chuàng)建RandomAccessFile對象seek(longpos)//將文件指針移動到距離文件開頭pos個字節(jié)處。getFilePoint()//返回當(dāng)前文件指針位置。length()//返回文件的長度。可用方法writeChar()、writeInt()、readChar()、readInt等對文件進(jìn)行各種類型的讀寫。20文件隨機(jī)讀寫例:向文件test.txt末尾添加一個字符串“hi”。importjava.io.*;publicclassRand{publicstaticvoidmain(Stringargs[])throwsIOException{RandomAccessFilef;try{ f=newRandomAccessFile("test.txt","rw"); f.seek(f.length()); f.writeBytes("hi\r\n");}catch(Exceptione){System.out.println("error");}}}21例:向文件寫入字符串。importjava.io.*;publicclassRandw{publicstaticvoidmain(Stringargs[])throwsIOException{RandomAccessFilef;try{ f=newRandomAccessFile("test.txt","rw"); f.writeBytes(“XuYingxiao\r\n"); f.writeBytes("1.28\r\n"); f.writeBytes("LiuFang\r\n"); f.writeBytes("6.16\r\n");}catch(Exceptione){}}}//例:AppendFile.java22“流”可以被理解為一條“管道”。這條“管道”有兩個端口:一端與數(shù)據(jù)源(當(dāng)輸入數(shù)據(jù)時)或數(shù)據(jù)宿(當(dāng)輸出數(shù)據(jù)時)相連,另一端與程序相連。23流概念輸出流示意圖輸入流示意圖Java使用流的機(jī)制實現(xiàn)輸入輸出操作。輸入流:通過打開一個到數(shù)據(jù)源(文件、內(nèi)存或網(wǎng)絡(luò)端口上的數(shù)據(jù))的輸入流,程序可以從數(shù)據(jù)源上順序讀取數(shù)據(jù)。輸出流:通過打開一個到目標(biāo)的輸出流,程序可以向外部目標(biāo)順序?qū)憯?shù)據(jù)。24流概念數(shù)據(jù)流的使用對輸入/輸出流類按用途分:數(shù)據(jù)的發(fā)起與接收流

用于向諸如字符串、文件、管道等專用的數(shù)據(jù)池讀寫數(shù)據(jù)。處理流:處理流類在進(jìn)行讀寫時要執(zhí)行某種處理,如緩沖、編碼等25流的使用過程讀數(shù)據(jù)的邏輯為:openastreamwhilemoreinformationreadinformationclosethestream26寫數(shù)據(jù)的邏輯為:openastreamwhilemoreinformationwriteinformationclosethestreamJava用于輸入輸出流的類按所讀寫的數(shù)據(jù)類型分兩類:字節(jié)流類(ByteStreams)字節(jié)流類用于向字節(jié)流讀寫8位二進(jìn)制的字節(jié)。一般地,字節(jié)流類主要用于讀寫諸如圖象或聲音等的二進(jìn)制數(shù)據(jù)。字符流類(CharacterStreams)字符流類用于向字符流讀寫16位二進(jìn)制字符。27Java用于輸入輸出流的類java.io中的基本流類:說明:它們是抽象類,不能直接創(chuàng)建對象。28字節(jié)流字節(jié)流類包括字節(jié)輸入流和字節(jié)輸出流,這兩大類別都是由多個類組成的:Inputstream類及其子類實現(xiàn)多種字節(jié)輸入流;OutputStream類及其子類實現(xiàn)多種字節(jié)輸出流。29InputStream類及其子類Thethreebasicreadmethods:intread()intread(byte[]buffer)intread(byte[]buffer,intoffset,intlength)Theothermethods:voidclose()intavailable()longskip(longn)30InputStream及其子類的層次結(jié)構(gòu)31OutputStream類及其子類Thethreebasicwritemethods:voidwrite(intc)voidwrite(byte[]buffer)voidwrite(byte[]buffer,intoffset,intlength)Theothermethods:voidclose()voidflush()32OutputStreamClass的繼承關(guān)系33Java標(biāo)準(zhǔn)輸入輸出Java中對應(yīng)鍵盤輸入的輸入流為System.in,對應(yīng)屏幕輸出的輸出流為System.out。in和out都是System的類變量,in的類型為InputStream類型,可以使用read()方法進(jìn)行讀取。System.in的read()方法一次只能讀取一個字符或按照byte類型的數(shù)組來讀取。34out的類型為PrintStream類型,經(jīng)常使用方法print()和println()。

PrintStream類聲明print()和println()的重載方法,參數(shù)分別是8種基本數(shù)據(jù)類型及數(shù)組、字符串和對象等,Java自動將各數(shù)據(jù)類型參數(shù)值按照指定格式轉(zhuǎn)換成對應(yīng)的字符串輸出。35Java標(biāo)準(zhǔn)輸入輸出標(biāo)準(zhǔn)輸入輸出--例importjava.io.*;classIOApp{publicstaticvoidmain(Stringargs[])throwsIOException{bytebuffer[]=newbyte[255];System.out.println("enter:");System.in.read(buffer,0,255);System.out.println("Got:");Stringx=newString(buffer);System.out.println(x);}}//例:KeyboardInput.java36文件字節(jié)流在對文件進(jìn)行讀/寫操作中的數(shù)據(jù)傳輸功能,由文件字節(jié)輸入/輸出流類FileInputStream和FileOutputStream類實現(xiàn),其數(shù)據(jù)源都是文件。構(gòu)造方法參數(shù):字符串代表的文件或File類型的對象。用read()和write()方法讀寫文件。37例importjava.io.*;publicclassFileApp1{publicstaticvoidmain(Stringargs[])throwsIOException{intb;FileInputStreamfileIn=newFileInputStream(“fileapp1.java”);while((b=fileIn.read())!=-1)System.out.print((char)b);}}例子:ReadByte.java,WriterBytes.java,OutputFile.javacopyFile.java38數(shù)據(jù)字節(jié)流Java將基本數(shù)據(jù)類型數(shù)據(jù)的讀寫問題封裝成了數(shù)據(jù)字節(jié)流。數(shù)據(jù)字節(jié)輸入流DataInputStream和數(shù)據(jù)字節(jié)輸出流DataOutputStream類提供直接讀或?qū)?種基本數(shù)據(jù)類型數(shù)據(jù)的方法。在讀或?qū)懸环N基本數(shù)據(jù)類型數(shù)據(jù)時,不必關(guān)心它的實際長度是多少字節(jié)。39數(shù)據(jù)字節(jié)流數(shù)據(jù)字節(jié)輸入流DataInputStream主要方法:publicDataInputStream(InputStreamin);readShort()、readByte()、readInt()、readLong()、readFloat()、readDouble()、readChar()、readBoolean()8個read方法不能重載40數(shù)據(jù)字節(jié)流數(shù)據(jù)字節(jié)輸出流DataOutputStream主要方法:publicDataOutputStream(OutputStreamout);writeShort()、writeByte()、writeInt()、writeLong()、writeFloat()、writeDouble()、writeChar()、writeBoolean()、writeChars()例:IntFile.java41對象字節(jié)流對記錄式文件進(jìn)行讀寫操作,可以使用對象流以對象為單位讀取或?qū)懭胍粋€對象。對象流分為對象輸入流ObjectInpuStream類和對象輸出流ObjectOutputStream類。42對象字節(jié)流對象輸入流ObjectInpuStream類主要方法:publicObjectInputStream(InputStreamin)throwsIOExceptionpublicfinalObjectreadObject()throwsIOException,ClassNotFoundException43對象字節(jié)流對象輸出流ObjectOutpuStream類主要方法:publicObjectOutputStream(OutputStreamout)throwsIOExceptionpublicfinalvoidwriteObject()throwsIOException例:ObjectFile.java44管道字節(jié)流數(shù)據(jù)在內(nèi)存的兩個對象之間流動。PipedInputStream:提供管道輸入流對象的構(gòu)造方法和connect()接方法;PipedOutputStream:提供管道輸出流對象的構(gòu)造方法和connect()連接方法。例:Sendcard.java45字符流Reader和Writer類是字符輸入/輸出流的抽象類,其中約定字符流的基本輸入/輸出操作方法,他們的每個子類實現(xiàn)一種特定的字符流輸入或輸出操作。字符流用來處理純文本本件,如HTML文檔文件、Java源程序文件等。46Reader類及其子類Thethreebasicreadmethods:intread()intread(char[]cbuf)intread(char[]cbuf,intoffset,intlength)Theothermethods:voidclose()booleanready()longskip(longn)47Reader類及其子類的層次關(guān)系48Writer類及其子類Thethreebasicwritemethods:voidwrite(intc)voidwrite(char[]cbuf)voidwrite(char[]cbuf,intoffset,intlength)voidwrite(Stringstring)voidwrite(Stringstring,intoffset,intlength)49Writer類及其子類的層次關(guān)系50文件字符流FileReader和FileWriter類用于文本文件

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論