




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
文件操作應(yīng)用單元七File類字節(jié)流和字符流其他流目錄CONTENTS1237.1File類Java是面向?qū)ο蟮恼Z言,要想把數(shù)據(jù)存到文件中,必須要有一個(gè)對(duì)象表示這個(gè)文件。File類的作用是代表一個(gè)特定的文件或目錄,并提供了若干方法對(duì)這些文件或目錄進(jìn)行各種操作。File類在java.io包下,與系統(tǒng)輸入/輸出相關(guān)的類通常都在此包下。7.1.1File類構(gòu)造方法構(gòu)造一個(gè)File類的實(shí)例,并不是創(chuàng)建這個(gè)目錄或文件,而創(chuàng)建的是該路徑(目錄或文件)的一個(gè)抽象,它可能真實(shí)存在也可能不存在。File類的構(gòu)造方法有如下四種:●File(Fileparent,Stringchild)
根據(jù)parent抽象路徑名和child路徑名字符串創(chuàng)建一個(gè)新File實(shí)例?!馞ile(Stringpathname)
通過將給定路徑名字符串轉(zhuǎn)換為抽象路徑名來創(chuàng)建一個(gè)新File實(shí)例?!馞iIe(Stringparent,Stringchild)
根據(jù)parent路徑名字符串和child路徑名字符串創(chuàng)建一個(gè)新File實(shí)例。●File(URIuri)
通過將給定的URI類對(duì)象轉(zhuǎn)換為一個(gè)抽象路徑名來創(chuàng)建一個(gè)新的File實(shí)例。7.1.1File類構(gòu)造方法File類提供了一些靜態(tài)屬性,通過這些靜態(tài)屬性,可以獲得Java虛擬機(jī)所在操系統(tǒng)的分隔符相關(guān)信息?!馞ile.pathSeparator與系統(tǒng)有關(guān)的路徑分隔符,它被表示為一個(gè)字符串?!馞ile.pathSeparatorChar與系統(tǒng)有關(guān)的路徑分隔符它被表示為一個(gè)字符?!馞ile.separator與系統(tǒng)有關(guān)的默認(rèn)名稱分隔符,它被表示為一個(gè)字符串?!馞ile.separatorChar在Windows平臺(tái)下編譯、運(yùn)行下面的程序,運(yùn)行結(jié)果如圖7.1所示。如果在Linux平臺(tái)下運(yùn)行,則PATH分隔符為“:”,而路徑分隔符為“/”importjava.io.File;publicclassTestFileSeparator{publicstaticvoidmain(Striiig[]args){System.out.println("PATH分隔符:"+File.pathSeparator);System.out.println("路徑分隔符:"+File.separator);}}圖7.1File類分隔符7.1.1File類構(gòu)造方法
下面我們通過一個(gè)具體的例子,來演示File類的一些常用方法,不易理解的代碼通過注釋加以了描迷。
publicstaticvoidshowFile()throwsIOException{ //創(chuàng)建file類對(duì)象file,注意使用轉(zhuǎn)義字符“\” Filef=newFile("C:\\com\\bd\\zuche\\Vehicle.java"); Filefl=newFile("C:\\com\\bd\\zuche\\Vehicel.java"); //當(dāng)不存在該文件時(shí),創(chuàng)建一個(gè)新的空文件 fl.createNewFile(); System.out.format(“輸出字符串:%s%n”,f);(代碼片段)7.1.2File類使用7.1.2File類使用圖7.2File類對(duì)象的常用方法7.1.3靜態(tài)引入從JDK1.5開始,增加了靜態(tài)導(dǎo)入的特性,用來導(dǎo)入指定類的某個(gè)靜態(tài)屬性或方法,或全部靜態(tài)屬性或方法,靜態(tài)導(dǎo)入使用importstatic語句。//靜態(tài)導(dǎo)入后的代碼importstaticjava.lang.System.out;importstaticjava.lang.Integer.*;publicclassTestStatic2{publicstaticvoidmain(String[]args){out.println(MAX_VALUE);out.println(toHexString(l2));}}//靜態(tài)導(dǎo)入前的代碼publicclassTestStatic{publicstaticvoidmain(String[]args){System.out.println(Integer.MAX_VALUE);System.out.println(Integer.toHexString(l2));}}7.1.4獲取目錄和文件File類提供了一些方法,用來返回指定路徑下的目錄和文件?!馭tring[]Iist()返回一個(gè)字符串?dāng)?shù)組,這些字符串指定此抽象路徑名表示的目錄中的文件和目錄。●String[]list(FilenameFilterfilter)返回一個(gè)字符串?dāng)?shù)組,這些字符串指定此抽象路徑名表示的目錄中滿足指定過濾器的文件和目錄?!馞ile[]listFiles()返回一個(gè)抽象路徑名數(shù)組,這些路徑名表示此抽象路徑名表示的目錄中的文件和目錄?!馞ile[]listFiles(FilenameFilterfilter)返回一個(gè)抽象路徑名數(shù)組,這些路徑名表示此抽象路徑名表示的目錄中滿足指定過濾器的文件和目錄。感謝觀看,下次再見文件操作應(yīng)用單元七File類字節(jié)流和字符流其他流目錄CONTENTS1237.2字節(jié)流和字符流
在Java中,文件的輸入和輸出是通過流(Stream)來實(shí)現(xiàn)的,流的概念源于UNIX中管道(pipe)的概念。在UNIX系統(tǒng)中,管道是一條不間斷的字節(jié)流,用來實(shí)現(xiàn)程序或進(jìn)程間的通信,或讀寫外圍設(shè)備、外部文件等。
—個(gè)流,必有源端和目的端,它們可以是計(jì)算機(jī)內(nèi)存的某些區(qū)域,也可以是磁盤文件,甚至可以是Internet上的某個(gè)URL。對(duì)于流而言,我們不用關(guān)心數(shù)據(jù)是如何傳輸?shù)?,只需要向源端輸入?shù)據(jù),從目的端獲取數(shù)據(jù)即可。圖7.5輸入流示意圖圖7.6輸出流示意圖7.2.1字節(jié)流
所有的字節(jié)流類都繼承自InputStream或OutputStream這兩個(gè)抽象類,這兩個(gè)抽象類擁有的方法可以通過查閱JavaAPI獲得。JDK提供了不少字節(jié)流,下面列舉了5個(gè)輸入字節(jié)流類,輸出字節(jié)流類和輸入字節(jié)流類存在對(duì)應(yīng)關(guān)系。
●FileInputStream:把一個(gè)文件作為輸入源,從本地文件系統(tǒng)中讀取數(shù)據(jù)字節(jié),實(shí)現(xiàn)對(duì)文件的讀取操作。
●ByteArraylnputStream:把內(nèi)存中的一個(gè)緩沖區(qū)作為輸入源,從內(nèi)存數(shù)組中讀取數(shù)據(jù)字節(jié)。
●ObjectInputStream:對(duì)以前使用ObjectOutputStream寫入的基本數(shù)據(jù)和對(duì)象進(jìn)行反序列化,用于恢
復(fù)那些以前序列化的對(duì)象,注意這個(gè)對(duì)象所屬的類必須實(shí)現(xiàn)Serializable接口。
●PipedlnputStream:實(shí)現(xiàn)了管道的概念,從線程管道中讀取數(shù)據(jù)字節(jié)。主要在線程中使用,用于兩個(gè)
線程間通信。
接下來列舉InputStream輸入流的可用方法。
●intread()
從輸入流中讀取數(shù)據(jù)的下一個(gè)字節(jié),返回0到255范圍內(nèi)的int型字節(jié)值。
●intread(byte[]b)
從輸入流中讀取一定數(shù)量的字節(jié),并將其存儲(chǔ)在字節(jié)數(shù)組b中,以整數(shù)形式返回實(shí)際讀取的字節(jié)數(shù)。
●intread(byte[]b,intoff,intlen)
將輸入流中最多l(xiāng)en(第三個(gè)參數(shù)值)個(gè)數(shù)據(jù)字節(jié)讀入字節(jié)數(shù)組b中,
以整數(shù)形式返回實(shí)際讀取的字節(jié)數(shù),off指數(shù)組b中將寫入數(shù)據(jù)的初始偏移量。
●voidclose()
關(guān)閉此輸入流,并釋放與該流關(guān)聯(lián)的所有系統(tǒng)資源。7.2.1字節(jié)流
所有的字符流類都繼承自Reader和Writer這兩個(gè)抽象類,其中Reader是用于讀取字符流的抽象類,子類必須實(shí)現(xiàn)的方法read(char[],int,int)和close()。多數(shù)子類重寫了此處定義的一些方法,以提供更高的效率或完成其他功能。Writer是用于寫入字符流的抽象類,和Reader類對(duì)應(yīng)。7.2.2字符流
原先的I/O類庫只支持8位的字節(jié)流,不能很好地處理16位的Unicode字符。Unicode是國際化的字符集,這樣增加了Readei和Writer之后,就可以自動(dòng)在本地字符集和Unicode國際化字符集之間進(jìn)行轉(zhuǎn)換,程序員在應(yīng)對(duì)國際化時(shí)不需要做過多額外的處理。編譯、運(yùn)行程序,運(yùn)行時(shí)在命令行輸入javaTestCharStreamC:\com\bd\zuche\Vehicle.javaC:\com\bd\zuche\Vehicle2.java,其中C:\com\bd\zuche\Vehicle.java是第一個(gè)參數(shù),C:\com\bd\zuche\Vehicle2.java是第二個(gè)參數(shù),運(yùn)行結(jié)束后在C:\com\bd\zuche目錄下新建了一個(gè)Vehicle2.java文件,內(nèi)容和Vehicle.java文件內(nèi)容一致。7.2.2字符流importjava.io.*;publicclassTestCharStream{publicstaticvoidmain(String[]args)throwsIOException{FileReaderin=null;FileWriterout=null;try{//其中args[0]代表程序執(zhí)行時(shí)輸入的第一個(gè)參數(shù)in=newFileReader(args[0]);out=newFileWriter(args[l]);//通過逐個(gè)讀取、存入字符,實(shí)現(xiàn)文件復(fù)制intc;while((c=in.read())!==-1){out.write(c);}}catch(IOExceptione){System.out.println(e.getMessage());}finally{if(in!=null){in.close();}if(out!=null){out.close();}}}}感謝觀看,下次再見文件操作應(yīng)用單元七File類字節(jié)流和字符流其他流目錄CONTENTS1237.3其他流
到目前為止,我們使用的字節(jié)流、字符流都是無緩沖的輸入、輸出流,這就意味著,每一次的讀、寫操作都會(huì)交給操作系統(tǒng)來處理。這樣的做法可能會(huì)對(duì)系統(tǒng)的性能造成很大的影響,因?yàn)槊恳淮尾僮鞫伎赡芤l(fā)磁盤硬件的讀、寫或網(wǎng)絡(luò)的訪問,這些磁盤硬件讀、寫和網(wǎng)絡(luò)訪問會(huì)占用大量系統(tǒng)資源,影響效率。7.3.1緩沖流
在實(shí)際編程過程中,這些對(duì)象的引用還要傳入到裝飾類中去,動(dòng)態(tài)地給這些對(duì)象增加額外的功能,形成新的對(duì)象,這些新的對(duì)象才是我們實(shí)際需要的字節(jié)流和字符流對(duì)象,這個(gè)過程同時(shí)也說明了裝飾器模式是使用的。裝飾類的使用如下所示: FileInputStreamfis=newFileInputStream("Car.java");
裝飾器類in=new裝飾器類(fis);
緩沖流是一種裝飾器類,目的是讓原字節(jié)流、字符流新增緩沖的功能。以字符緩沖流為例進(jìn)行說明,字符緩沖流從字符流中讀取、寫入字符,不立刻要求系統(tǒng)進(jìn)行處理,而是緩沖部分字符,從而實(shí)現(xiàn)按規(guī)定字符數(shù)、按行等方式的高效的讀取或?qū)懭搿?.3.1緩沖流
通過一個(gè)輸入字符流和輸出字符流創(chuàng)建輸入字符緩沖流和輸出字符緩沖流的代碼如下:
BufferedReaderin=newBufferedReader(newFileReader("Car.java")); BufferedWriterout=newBufferedWriter(newFileWriter("Truck.java"));
輸入字符緩沖流類和輸出字符緩沖流類的方法和輸入字符流類和輸出字符流類的方法類似。7.3.2字節(jié)流轉(zhuǎn)換為字符流
假設(shè)有這樣的需求:使用一個(gè)輸入字符緩沖流讀取用戶在命令行輸入的一行數(shù)據(jù)。首先得知需要用輸入字符緩沖流讀取數(shù)據(jù),我們想到了使用剛才學(xué)習(xí)的BufferedReader這個(gè)類。需要獲取的是用戶在命令行輸入的一行數(shù)據(jù),System.in是InputStream類的靜態(tài)對(duì)象,可以從命令行讀取數(shù)據(jù)字節(jié)?,F(xiàn)在問題出現(xiàn)了,需要把一個(gè)字節(jié)流轉(zhuǎn)換成一個(gè)字符流。我們可以使用InputStreamReader和OutputStreamWriter這兩個(gè)類來進(jìn)行轉(zhuǎn)換。importjava.io.*;publicclassTestByteToChar{publicstaticvoidmain(String[]args)throwsIOException{BufferedReaderin=null;try{//將字節(jié)流System.in通過InputStreamReader轉(zhuǎn)換成字符流in=newBufferedReader(newInputStreamReader(System.in));System.out.print("請(qǐng)輸入你今天最想說的話:");Strings=in.readLine();System.out.println("你最想表達(dá)的是:"+s);}catch(IOExceptione){System.out.println(e.g
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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至2031年中國PVC硬質(zhì)墊塊行業(yè)投資前景及策略咨詢研究報(bào)告
- 2025至2030年圓瓶站立貼標(biāo)機(jī)項(xiàng)目投資價(jià)值分析報(bào)告
- 2025年電商培訓(xùn)項(xiàng)目發(fā)展計(jì)劃
- 2025年金膚美白滋養(yǎng)溶角質(zhì)露項(xiàng)目可行性研究報(bào)告
- 2025至2030年中國直列螺桿式注塑機(jī)數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 2025年鑲骨架紫竹插口巴烏項(xiàng)目可行性研究報(bào)告
- 2025年自粘裝訂夾項(xiàng)目可行性研究報(bào)告
- ?;郀t礦渣粉行業(yè)深度研究報(bào)告
- 2025至2030年中國迷你中性筆數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 2025至2030年中國立式畫架數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 衛(wèi)生院基本藥物采購供應(yīng)管理制度
- 抽水蓄能輔助洞室施工方案
- 數(shù)據(jù)結(jié)構(gòu)英文教學(xué)課件:chapter7 Searching
- 護(hù)理核心制度及重點(diǎn)環(huán)節(jié)-PPT課件
- 夾套管現(xiàn)場(chǎng)施工方法
- 部編版語文五年級(jí)下冊(cè)形近字組詞參考
- 第三章走向混沌的道路
- 化探野外工作方法及要求
- 2006年事業(yè)單位工資改革工資標(biāo)準(zhǔn)表及套改表2
- 江蘇省特種設(shè)備安全條例2021
- 青島海洋地質(zhì)研究所公開招聘面試答辯PPT課件
評(píng)論
0/150
提交評(píng)論