第20章文件(IO)操作_第1頁(yè)
第20章文件(IO)操作_第2頁(yè)
第20章文件(IO)操作_第3頁(yè)
第20章文件(IO)操作_第4頁(yè)
第20章文件(IO)操作_第5頁(yè)
已閱讀5頁(yè),還剩25頁(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)介

第20章

文件IO操作

File類

RandomAccessFile類流類字符編碼對(duì)象序列化20.1File類

File類是IO包中唯一代表磁盤文件本身的對(duì)象,F(xiàn)ile類定義了一些與平臺(tái)無(wú)關(guān)的方法來(lái)操縱文件,通過(guò)調(diào)用File類提供的各種方法,能夠完成創(chuàng)建、刪除文件,重命名文件,判斷文件的讀寫權(quán)限及文件是否存在,設(shè)置和查詢文件的最近修改時(shí)間等操作【范例20-1】File方法的使用范例20.2RandomAccessFile類

RandomAccessFile類是Java語(yǔ)言中功能最為豐富的文件訪問(wèn)類,它提供了眾多的文件訪問(wèn)方法,RandomAccessFile能以只讀或讀寫方式打開文件,使用哪種方式取決于用戶創(chuàng)建RandomAccessFile類對(duì)象的構(gòu)造方法

newRandomAccessFile(f,"rw"); //讀寫方式

newRandomAccessFile(f,"r"); //只讀方式【范例20-2】員工信息類的使用范例20.3流類20.3.1字節(jié)流20.3.2字符流20.3.3管道流20.3.4ByteArrayInputStream與ByteArrayOutputStream20.3.5System.in與System.out20.3.6打印流20.3.7DataInputStream與DataOutputStream20.3.8合并流20.3.9字節(jié)流與字符流的轉(zhuǎn)換20.3.10IO包中的類層次關(guān)系圖20.3流類

Java的流式輸入/輸出建立在四個(gè)抽象類的基礎(chǔ)上:InputStream,OutputStream,Reader和Writer,操作文件流時(shí),不管是字節(jié)流還是字符流都可以按照以下的方式進(jìn)行。⑴使用File類找到一個(gè)文件

⑵通過(guò)File類的對(duì)象去實(shí)例化字節(jié)流或字符流的子類

⑶進(jìn)行字節(jié)(字符)的讀、寫操作

⑷關(guān)閉文件流20.3.1字節(jié)流

1.InputStream(輸入字節(jié)流)方法描述intavailable()返回當(dāng)前可讀的輸入字節(jié)數(shù)voidclose()關(guān)閉輸入流。關(guān)閉之后若再讀取則會(huì)產(chǎn)生IOException異常voidmark(intnumBytes)在輸入流的當(dāng)前點(diǎn)放置一個(gè)標(biāo)記。該流在讀取N個(gè)Bytes字節(jié)前都保持有效booleanmarkSupported()如果調(diào)用的流支持mark()/reset()就返回true20.3.1字節(jié)流

方法描述intread()如果下一個(gè)字節(jié)可讀則返回一個(gè)整型,遇到文件尾時(shí)返回-1intread(bytebuffer[])試圖讀取buffer.length個(gè)字節(jié)到buffer中,并返回實(shí)際成功讀取的字節(jié)數(shù)。遇到文件尾時(shí)返回-1intread(bytebuffer[],intoffset,intnumBytes)試圖讀取buffer中從buffer[offset]開始的numBytes個(gè)字節(jié),返回實(shí)際讀取的字節(jié)數(shù)。遇到文件結(jié)尾時(shí)返回-1voidreset()重新設(shè)置輸入指針到先前設(shè)置的標(biāo)志處longskip(longnumBytes)忽略numBytes個(gè)輸入字節(jié),返回實(shí)際忽略的字節(jié)數(shù)20.3.1字節(jié)流

2.OutputStream(輸出字節(jié)流)方法描述voidclose()關(guān)閉輸出流。關(guān)閉后的寫操作會(huì)產(chǎn)生IOException異常voidflush()定制輸出狀態(tài)以使每個(gè)緩沖器都被清除,也就是刷新輸出緩沖區(qū)voidwrite(intb)向輸出流寫入單個(gè)字節(jié)。注意參數(shù)是一個(gè)整型數(shù),它允許設(shè)計(jì)者不必把參數(shù)轉(zhuǎn)換成字節(jié)型就可以調(diào)用write()方法voidwrite(bytebuffer[])向一個(gè)輸出流寫一個(gè)完整的字節(jié)數(shù)組voidwrite(bytebuffer[],intoffset,intnumBytes)寫數(shù)組buffer以buffer[offset]為起點(diǎn)的numBytes個(gè)字節(jié)區(qū)域內(nèi)的內(nèi)容20.3.1字節(jié)流

3.FileInputStream(文件輸入流)FileInputStream類創(chuàng)建一個(gè)能從文件讀取字節(jié)的InputStream類,它的兩個(gè)常用的構(gòu)造方法如下:FileInputStream(Stringfilepath)

FileInputStream(FilefileObj)20.3.1字節(jié)流

4.FileOutputStream(文件輸出流)

FileOutputStream創(chuàng)建了一個(gè)可以向文件寫入字節(jié)的類OutputStream,它常用的構(gòu)造方法如下:FileOutputStream(StringfilePath)FileOutputStream(FilefileObj)FileOutputStream(StringfilePath,booleanappend)【范例20-3】向文件中寫入字符串并讀出20.3.2字符流

1.Reader方法描述abstractvoidclose()關(guān)閉輸入源。進(jìn)一步的讀取將會(huì)產(chǎn)生IOException異常voidmark(intnumChars)在輸入流的當(dāng)前位置設(shè)立一個(gè)標(biāo)志。該輸入流在numChars個(gè)字符被讀取之前有效booleanmarkSupported()該流支持mark()/reset()則返回trueintread()如果調(diào)用的輸入流的下一個(gè)字符可讀則返回一個(gè)整型。遇到文件尾時(shí)返回-120.3.2字符流

方法描述intread(charbuffer[])試圖讀取buffer中的buffer.length個(gè)字符,返回實(shí)際成功讀取的字符數(shù)。遇到文件尾返回-1abstractintread(charbuffer[],intoffset,intnumChars)試圖讀取buffer中從buffer[offset]開始的numChars個(gè)字符,返回實(shí)際成功讀取的字符數(shù)。遇到文件尾返回-1booleanready()如果下一個(gè)輸入請(qǐng)求不等待則返回true,否則返回falselongskip(longnumChars)跳過(guò)numChars個(gè)輸入字符,返回跳過(guò)的字符設(shè)置輸入指針到先前設(shè)立的標(biāo)志處數(shù)20.3.2字符流

2.Writer方法描述abstractvoidclose()關(guān)閉輸出流。關(guān)閉后的寫操作會(huì)產(chǎn)生IOException異常abstractvoidflush()定制輸出狀態(tài)以使每個(gè)緩沖器都被清除。也就是刷新輸出緩沖voidwrite(intch)向輸出流寫入單個(gè)字符。注意參數(shù)是一個(gè)整型,它允許設(shè)計(jì)者不必把參數(shù)轉(zhuǎn)換成字符型就可以調(diào)用write()方法voidwrite(charbuffer[])向一個(gè)輸出流寫一個(gè)完整的字符數(shù)組20.3.2字符流

方法描述abstractvoidwrite(charbuffer[],intoffset,intnumChars)向調(diào)用的輸出流寫入數(shù)組buffer以buffer[offset]為起點(diǎn)的N個(gè)Chars區(qū)域內(nèi)的內(nèi)容voidwrite(Stringstr)向調(diào)用的輸出流寫strvoidwrite(Stringstr,intoffset,intnumChars)寫數(shù)組str中以制定的offset為起點(diǎn)的長(zhǎng)度為numChars個(gè)字符區(qū)域內(nèi)的內(nèi)容20.3.2字符流

3.FileReaderFileReader類創(chuàng)建了一個(gè)可以讀取文件內(nèi)容的Reader類。它最常用的構(gòu)造方法顯示如下:FileReader(StringfilePath)FileReader(FilefileObj)20.3.2字符流

4.FileWriterFileWriter創(chuàng)建一個(gè)可以寫文件的Writer類。它最常用的構(gòu)造方法如下:FileWriter(StringfilePath)FileWriter(StringfilePath,booleanappend)FileWriter(FilefileObj)【范例20-4】字符流使用范例20.3.3管道流管道流主要作用是可以連接兩個(gè)線程間的通信。管道流也分為字節(jié)流(PipedInputStream、PipedOutputStream)與字符流(PipedReader、PipedWriter)兩種類型【范例20-5】管道流使用范例20.3.4ByteArrayInputStream與ByteArrayOutputStreamByteArrayInputStream是輸入流的一種實(shí)現(xiàn),它有兩個(gè)構(gòu)造方法,每個(gè)構(gòu)造方法都需要一個(gè)字節(jié)數(shù)組來(lái)作為其數(shù)據(jù)源ByteArrayInputStream(byte[]buf)ByteArrayInputStream(byte[]buf,intoffse,intlength)ByteArrayOutputStream()BuyteArrayoutputStream(int)【范例20-6】ByteArrayInputStream類使用范例20.3.5System.in與System.out為了支持標(biāo)準(zhǔn)輸入輸出設(shè)備,Java定義了兩個(gè)特殊的流對(duì)象:System.in和System.out,System.in對(duì)應(yīng)鍵盤,System.out對(duì)應(yīng)顯示器20.3.6打印流PrintStream類提供了一系列的print和println方法,PrintStream有下面幾個(gè)構(gòu)造方法:PrintStream(OutputStreamout)

PrintStream(OutputStreamout,booleanauotflush)PrintStream(OutputStreamout,booleanauotflush,Stringencoding)【范例20-7】PrintWriter類向屏幕輸出信息范例【范例20-8】PrintWriter向文件中輸出信息范例20.3.7DataInputStream與DataOutputStream

DataInputStream與DataOutputStream提供了與平臺(tái)無(wú)關(guān)的數(shù)據(jù)操作【范例20-9】DataInputStream與DataOutputStream使用范例20.3.8合并流采用SequenceInputStream類,可以實(shí)現(xiàn)兩個(gè)文件的合并操作【范例20-10】使用合并流將兩個(gè)文件合并20.3.9字節(jié)流與字符流的轉(zhuǎn)換Java支持字節(jié)流和字符流,但有時(shí)需要字節(jié)流和字符流之間的轉(zhuǎn)換,InputStreamReader和OutputStreamWriter,這兩個(gè)類是字節(jié)流和字符流之間相互轉(zhuǎn)換的類,InputStreamReader可以將一個(gè)字節(jié)流中的字節(jié)解碼成字符,OuputStreamWriter將寫入的字符編碼成字節(jié)后寫入一個(gè)字節(jié)流【范例20-11】字符流的轉(zhuǎn)換使用范例20.3.10IO包中的類層次關(guān)系圖1.字節(jié)輸入流(InputStream)20.3.10IO包中的類層次關(guān)系圖1.字節(jié)輸出流(OutputStream)20.3.10IO包中的類層次關(guān)系圖3.字符輸入流20.3.10IO包中的類層次關(guān)系圖4.字符輸出流20.4字符編碼計(jì)算機(jī)里只有數(shù)字,字符與數(shù)字對(duì)應(yīng)的編碼固定下來(lái)后,這套編碼規(guī)則被稱為ASCII碼許多國(guó)家都把本地的字符集引入了計(jì)算機(jī),擴(kuò)展了計(jì)算機(jī)中字符的范圍,中國(guó)大陸為每一個(gè)中文字符都指定了一個(gè)對(duì)應(yīng)的數(shù)字,這套編碼規(guī)則稱為GBK為了解決各個(gè)國(guó)家和地區(qū)使用自不同的本地化字符編碼帶來(lái)的不便,人們將全世界所有的符號(hào)進(jìn)行了統(tǒng)一編碼,稱之為Unicode編碼

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論