版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、 l 使用 JJava 操作文本本文件的方方法詳解 httpp:/art/37377/2000411008/52236277_1.hhtml l FileeReadder 是是什么類?和 FiileInnputSStreaam 有什什么不同? httpp:/m/askk2/assk1077572.htm 自己己的整理和和領(lǐng)會: 引言言: C語言只需需要一個FFile*就可以了了,與C不不同,jaava有一一系列流類類型,其數(shù)數(shù)量超過660種。類類庫的設(shè)計(jì)計(jì)者聲稱:“有足夠的理由由為用戶提提供豐富的的流類型的的選擇:這這樣做可以以減少程序序的錯誤?!崩?,在在C語言種種,許多人人認(rèn)為“將輸出流寫
2、寫入一個只只讀模式的的文件”是很常見見的錯誤。(事實(shí)上上,這并不不常見。)我們認(rèn)為在在C語語言中,流流接口設(shè)計(jì)計(jì)者避免程程序出錯的的主要“工具”是小心謹(jǐn)謹(jǐn)慎的態(tài)度度,在jaava語言言中更是如如此。流庫的的高度復(fù)雜雜性迫使程程序設(shè)計(jì)人人員謹(jǐn)小慎慎微。 1. Fille類 1 ) FFile 類介紹( corre jaava 6388 頁) File 類封裝了了對用戶機(jī)機(jī)器的文件件系統(tǒng)進(jìn)行行操作的功功能。例如如,可以用用 Fille 類獲獲得文件上上次修改的的時間移動動,或者對文件件進(jìn)行刪除除、重命名名。換句話話說,流類類關(guān)注的是是文件內(nèi)容容,而 FFile 類關(guān)注的的是文件在在磁盤上的的存儲。
3、 File 類的主要要方法有: gettNamee(),ggetCaanoniicalFFile(),laastMoodifiied(),isDDerecctor(),issFilee(),ggetPaath() 等; 2 ) FFile 類與 FFileIInputtStreeam 類類的區(qū)別: 流類關(guān)注的的是文件內(nèi)內(nèi)容,而 Filee 類關(guān)注注的是文件件在磁盤上上的存儲。 File 不屬于文文件流 , 只能代代表一個文文件或是目目錄的路徑徑名而已。 提示:( corre jaava 6399 頁) 如果處理文文件或者目目錄名,就就應(yīng)該使用用 Fille 對象象,而不是是字符串。例如, Fi
4、lee 類的 equaals 方方法知道一一些文件系統(tǒng)對對大小寫是是敏感的,目目錄尾的“ / ”字符無關(guān)關(guān)緊要。 自己的領(lǐng)會會: FileIInputtStreeam 類類或者 FFileRReadeer 類的的構(gòu)造函數(shù)數(shù)有多個,其其中典型的的兩個分別別為:一個個使用 FFile 對象為參數(shù);而另另一個使用用表示路徑徑的 Sttringg 對象作作為參數(shù);自己以前前一直覺得得直接用了了 Strring 指定路徑徑就可以了,一直不不明白為什什么很多人人都先構(gòu)造造一個 FFile 對象,現(xiàn)現(xiàn)在終于明明白了,“如果處理理文件或者者目錄名,就就應(yīng)該使用 FFile 對象,而而不是字符符串。”! 2.
5、FiileInnputSStreaam 類 1 ) FFileIInputtStreeam 類類介紹: 以字節(jié)為單單位(非 uniccode )的流處處理。字節(jié)節(jié)序列即:二進(jìn)制數(shù)數(shù)據(jù)。與編編碼無關(guān),不不存在亂碼碼問題。 FileIInputtStreeam 類類的主要方方法有: Read (), readd ( bbyte b ), rread ( byyte,intt offf,intt lenn ) ,avaiilablle(); 2 ) FFileIInputtStreeam 類類與 FiileReeaderr 類的區(qū)區(qū)別: 兩個類的構(gòu)構(gòu)造函數(shù)的的形式和參參數(shù)都是相相同的,參參數(shù)為 FF
6、ile 對象或者者表示路徑徑的 Sttringg ,它們們到底有何何區(qū)別呢? l RReadeers aand WWriteers wwork onlyy on linee bassed ccharaacterr datta, sso pllain textt filles.For aanythhing elsee, yoou MUUST uuse SStreaams. l JJDK5 API: FileIInputtStreeam iis meeant for readding streeams of rraw bbytess succh ass imaage ddata. Forr rea
7、adingg strreamss of chharaccterss, coonsidder uusingg FilleReaader. FileRReadeer iss meaant ffor rreadiing sstreaams oof chharaccterss. Foor reeadinng sttreamms off raww byttes, conssiderr usingg a FFileIInputtStreeam . l FFileIInputtStreeam :以字節(jié)流流方式讀取取; FiileReeaderr :把文文件轉(zhuǎn)換為為字符流讀讀入; l InnputSStrea
8、am提供的的是字節(jié)流流的讀取,而而非文本讀讀取,這是是和Reaader類類的根本區(qū)區(qū)別。用RReadeer讀取出出來的是chhar數(shù)組組或者Sttringg ,使用用InpuutStrream讀讀取出來的的是bytte數(shù)組。l Reeaderr類及其子子類提供的的字符流的的讀取chhar(116位,uunicoode編碼碼),innputSStreaam及其子子類提供字字節(jié)流的讀取bbyte(88位),所所以FilleReaader類類是將文件件按字符流流的方式讀讀取,F(xiàn)iileInnputSStreaam則按字字節(jié)流的方方式讀取文件;InpuutStrreamRReadeer可以將將讀如st
9、treamm轉(zhuǎn)換成字字符流方式式,是reeaderr和strream之之間的橋梁梁l 最初Jaava是不不支持對文文本文件的的處理的,為為了彌補(bǔ)這這個缺憾而而引入了RReadeer和Wrriterr兩個類。 l FFileIInputtStreeam 類類以二進(jìn)制制輸入 / 輸出, I/O 速度快且且效率搞,但但是它的 readd ()方方法讀到的是一個字字節(jié)(二進(jìn)進(jìn)制數(shù)據(jù)),很很不利于人人們閱讀。 l 而而 FilleReaader 類彌補(bǔ)了了這個缺陷陷,可以以以文本格式式輸入 / 輸出,非非常方便;比如可以以使用 whilee(chh = ffilerreadeer.reead()!=-1
10、 ) 循環(huán)來讀讀取文件;可以使用用 BufffereedReaader 的 reeadLiine() 方法一一行一行的讀讀取文本。 l 當(dāng)當(dāng)我們讀寫寫文本文件件的時候,采采用 Reeaderr 是非常常方便的,比比如 FiileReeaderr , InputtStreeamReeaderr 和 BBuffeeredRReadeer 。其其中最重要要的類是 InpuutStrreamRReadeer ,它它是字節(jié)轉(zhuǎn)轉(zhuǎn)換為字符符的橋梁。 你可可以在構(gòu)造造器重指定定編碼的方方式,如果果不指定的的話將采用用底層操作作系統(tǒng)的默默認(rèn)編碼方方式,例如如 GBKK 等。 l FFileRReadeer 與
11、InpuutStrreamRReadeer 涉及及編碼轉(zhuǎn)換換 ( 指指定編碼方方式或者采采用 oss 默認(rèn)編編碼 ) ,可能在不同的的平臺上出出現(xiàn)亂碼現(xiàn)現(xiàn)象!而 FileeInpuutStrream 以二進(jìn)制制方式處理理,不會出出現(xiàn)亂碼現(xiàn)現(xiàn)象 . 3 )自己己的領(lǐng)會: l 如如果處理純純文本文件件,建議使使用 FiileReeaderr ,因?yàn)闉楦奖?,也也更適合閱閱讀;但是是要注意編編碼問題! l 其他情情況(處理理非純文本本文件),F(xiàn)FileIInputtStreeam是唯唯一的選擇擇;FilleInpputSttreamm是進(jìn)Soockett通訊時會會用到很多,如如將文件流流是Strre
12、am的的方式傳向向服務(wù)器! 3. FiileReeaderr 類 1) FFileRReadeer 類介介紹: InputtStreeamReeaderr 類的子子類,所有有方法( readd ()等等)都從父父類 InnputSStreaamReaader 中繼承而而來; 2) 與與 InpputSttreammReadder 類類的區(qū)別: l 自自己的領(lǐng)會會: 該類與它的的父類 IInputtStreeamReeaderr 的主要要不同在于于構(gòu)造函數(shù)數(shù),主要區(qū)區(qū)別也就在在于構(gòu)造函函數(shù)!從 InputtStreeamReeaderr 的構(gòu)造造函數(shù)中看看到,參數(shù)數(shù)為 InnputSStreaa
13、m 和編編碼方式,可可以看出,當(dāng)當(dāng)要指定編編碼方式時時,必須使用 InpuutStrreamRReadeer 類;而 FiileReeaderr 構(gòu)造函函數(shù)的參數(shù)數(shù)與 FiileInnputSStreaam 同,為為 Fille 對象象或表示 paath 的的 Strring ,可以看看出,當(dāng)要要根據(jù) FFile 對象或者者 Strring 讀取一個個文件時,用用 FilleReaader ;我想 FilleReaader 子類的作作用也就在在于這個小小分工吧。 3) 一一般用法: FileRReadeer frr = nnew FFileRReadeer(mming.txt); chhar
14、bufffer = neew chhar11024; innt chh = 00; whhile(ch = frr.reaad()!=-11 ) SSysteem.ouut.prrint(chaar)chh); 4. InnputSStreaamReaader 類 l 以以文本格式式輸入 / 輸出,可可以指定編編碼格式; l 主主要方法: getEnncodiing (),reead(); l 一一般用法: InputtStreeamReeaderr isrr = nnew IInputtStreeamReeaderr(neww FilleInpputSttreamm(miing.ttxt);
15、 whhile(ch = issr.reead()!=-1) SSysteem.ouut.prrint(chaar)chh); 5. BuufferredReeaderr 類 l JJdk5 api : Read textt froom a charracteer-innput streeam, buffferinng chharaccterss so as tto prrovidde foor thhe effficiient readiing oof chharaccterss, arrrayss, annd liines. l BuufferredReeaderr 由Reeaderr類擴(kuò)
16、展而而來,提供供通用的緩緩沖方式文文本讀取,而而且提供了了很實(shí)用的的readdLinee,讀取分行文文本很適合合,BufffereedReaader是是針對Reeaderr的,不直直接針對文文件,也不不是只針對對文件讀取取。l 一般用法法: BuffeeredRReadeer brr = nnew BBuffeeredRReadeer(neew InnputSStreaamReaader(new FileeInpuutStrream(minng.txxt);Strring dataa = nnull;whiile(dataa = bbr.reeadLiine()!=nnull)Syystemm
17、.outt.priintlnn(datta); 6. 總結(jié)結(jié)以上內(nèi)容容,得出比比較好的規(guī)規(guī)范用法: 1) FFile filee = nnew FFile (heello.txt); FileIInputtStreeam iin=neew FiileInnputSStreaam(fiile); 2) FFile filee = nnew FFile (heello.txt); FileIInputtStreeam iin=neew FiileInnputSStreaam(fiile); InputtStreeamReeaderr inRReadeer=neew InnputSStreaamRe
18、aader(in); BuffeeredRReadeer buufReaader=new BufffereddReadder(iinReaader); 3) FFile filee = nnew FFile (heello.txt); FileRReadeer fiileReeaderr=neww FilleReaader(filee); BuffeeredRReadeer buufReaader=new BufffereddReadder(ffileRReadeer); 7.一些寫寫法的區(qū)別別:1)File filee = nnew FFile (heello.txt);FileIInput
19、tStreeam iin=neew FiileInnputSStreaam(fiile);InputtStreeamReeaderr inRReadeer=neew InnputSStreaamReaader(in);BuffeeredRReadeer buufReaader=new BufffereddReadder(iinReaader); 2)FileIInputtStreeam iinnuull;File filee = nnew FFile (heello.txt);in=neew FiileInnputSStreaam(fiile);BuffeeredRReadeer buufRe
20、aader=new BufffereddReadder(nnew IInputtStreeamReeaderr(in); 3)File filee = nnew FFile (heello.txt);BuffeeredRReadeer buufReaader=new BufffereddReadder(nnew IInputtStreeamReeaderr(neww FilleInpputSttreamm(fille);上述兩種寫寫法的微小小區(qū)別:a)第二種種方式中把把“FileeInpuutStrream innnull;”定義單獨(dú)獨(dú)放在開始始處,說明明下面應(yīng)該該還有要用用到in對對象變量的
21、的地方;(BBuffeeredRReadeer處用了了)b)第二種種方式?jīng)]有有定義InnputSStreaamReaader的的對象變量量,直接在在BufffereddReadder的構(gòu)構(gòu)造函數(shù)中中new一一個,這種方式與與第一種方方式的主要要區(qū)別:IInputtStreeamReeaderr對象只使使用一次!這對于在這這里只需要要使用一次次這個InnputSStreaamReaader對對象的應(yīng)用用來說更好好;無需定定義InpputSttreammReadder的對對象變量,接接收由neew返回的的該對象的的引用,因因?yàn)橄旅娴牡某绦蛑胁徊恍枰@個個InpuutStrreamRReadeer的
22、對象象變量,所所以無需定定義;所以以這種情況況下,第二二種方式比比第一種更更好一些。c)第三種種方式中,典典型的三層層嵌套委派派關(guān)系,清清晰看出RReadeer的委派派模式(coreejavaa12章章有圖描述述該委派關(guān)關(guān)系),F(xiàn)FileIInputtStreeam和IInputtStreeamReeaderr都沒有定定義變量,nnew生成成的對象都都只是使用用一次。d)三種方方式的區(qū)別別也就在于于FileeInpuutStrream和和InpuutStrreamRReadeer對象是是否都只使使用一次,是是否需要定定義它們的的對象變量量,以及個個人的編碼碼習(xí)慣。e)但是要要注意異常常處理,F(xiàn)
23、FileIInputtStreeam(ffile)會拋出NNotFiileFooundEExcepptionn,如果采采用surrrounnd方式(try&catcch)處理理,應(yīng)該用用第二種方方式,這樣樣可以用SSysteem.ouut.prrintlln提示文文件未找到到;當(dāng)然在函數(shù)數(shù)名后使用用throows EExcepptionn,然后用用第三種方方式也行,但但似乎這適適合有用戶戶界面的情情況,把異異常拋出在在客戶端在在處理。例子:Java操操作文本文文件最初jaava是不不支持對文文本文件的的處理的,為為了彌補(bǔ)這這個缺憾而而引入了RReadeer和Wrriterr兩個類,這這兩個類都
24、都是抽象類類,Wriiter中中writte(chhar ch,int off,int lenggth),fflushh()和cclosee()方法法為抽象方方法,Reeaderr中reaad(chhar ch,int off,int lenggth)和和closse()方方法是抽象象方法。子子類應(yīng)該分分別實(shí)現(xiàn)他他們。當(dāng)我們們讀寫文本本文件的時時候,采用用Readder是非非常方便的的,比如FFileRReadeer,InnputSStreaamReaader和和BufffereddReadder。其其中最重要要的類是IInputtStreeamReeaderr,它是字字節(jié)轉(zhuǎn)換為為字符的橋橋梁
25、。你可可以在構(gòu)造造器重指定定編碼的方方式,如果果不指定的的話將采用用底層操作作系統(tǒng)的默默認(rèn)編碼方方式,例如如GBK等等。當(dāng)使用用FileeReadder讀取取文件的時時候。 FiileReeaderr fr = neew FiileReeaderr(miing.ttxt); intt ch = 0; whiile(ch = fr.readd()!=-1 ) SSysteem.ouut.prrint(chaar)chh); 其中rread()方法返返回的是讀讀取得下個個字符。當(dāng)當(dāng)然你也可可以使用rread(charr cch,innt offf,innt leengthh)這和處處理二進(jìn)制制文件
26、的時時候類似,不不多說了。如果使用用InpuutStrreamRReadeer來讀取取文件的時時候whhile(ch = issr.reead()!=-1) SSysteem.ouut.prrint(chaar)chh); 這和FFileRReadeer并沒有有什么區(qū)別別,事實(shí)上上在FilleReaader中中的方法都都是從InnputSStreaamReaader中中繼承過來來的。reead()方法是比比較好費(fèi)時時間的,如如果為了提提高效率我我們可以使使用BufffereedReaader對對Readder進(jìn)行行包裝,這這樣可以提提高讀取得得速度,我我們可以一一行一行的的讀取文本本,使用rr
27、eadLLine()方法。 BuufferredReeaderr br = neew BuufferredReeaderr(neww InpputSttreammReadder(nnew FFileIInputtStreeam(mingg.txtt); Strring dataa = nnull; whiile(dataa = bbr.reeadLiine()!=nnull) SSysteem.ouut.prrintlln(daata); 當(dāng)你明明白了如何何用Reaader來來讀取文本本文件的時時候那么用用Writter寫文文件同樣非非常簡單。有一點(diǎn)需需要注意,當(dāng)當(dāng)你寫文件件的時候,為為了提高
28、效效率,寫入入的數(shù)據(jù)會會先放入緩緩沖區(qū),然然后寫入文文件。因此此有時候你你需要主動動調(diào)用fllush()方法。與上面對對應(yīng)的寫文文件的方法法為FilleWriiter fw = neww FilleWriiter(helllo.ttxt); Strring s = helllo wworldd; fw.writte(s,0,s.lenggth(); fw.flussh(); OuttputSStreaamWriiter osw = neew OuutputtStreeamWrriterr(neww FilleOuttputSStreaam(hhelloo2.txxt); osww.wriite
29、(ss,0,ss.lenngth(); osww.fluush(); PriintWrriterr pw = neew PrrintWWriteer(neew OuutputtStreeamWrriterr(neww FilleOuttputSStreaam(hhelloo3.txxt),truue); pw.prinntln(s);不要忘忘記用完后后關(guān)閉流!下面是個個小例子,幫幫助新手理理解。其實(shí)實(shí)有的時候候javaa的IO系系統(tǒng)是需要要我們多記記記的,不不然哪天就就生疏了。測試文件件的內(nèi)容為為minng.txxthelllo wworldd i llike javaa lannguaggeimporrt jaava.iio.*;publiic cllass TesttFilee2publiic sttaticc voiid maain(SStrinng argss) thhrowss IOEExcepptionn FilleReaader fr =
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 攪拌站2025年度廣告宣傳合同3篇
- 二零二五版木屑生物質(zhì)炭深加工合同3篇
- 2025年物流企業(yè)運(yùn)輸承包經(jīng)營服務(wù)管理合同范本6篇
- 2025版少兒模特經(jīng)紀(jì)未成年演員聘用合同書3篇
- 二零二五年度水資源保護(hù)合同履行監(jiān)測與水權(quán)交易制度
- 二零二五年度退休人員旅游服務(wù)聘用合同
- 二零二五年度車輛代駕服務(wù)合同高端服務(wù)體驗(yàn)
- 2025年度車庫車位租賃權(quán)及收益權(quán)轉(zhuǎn)讓合同
- 2025年度銀行信用貸款合同范例
- 二零二五年度促銷員薪資調(diào)整與勞動合同3篇
- 開展課外讀物負(fù)面清單管理的具體實(shí)施舉措方案
- 2025年云南中煙工業(yè)限責(zé)任公司招聘420人高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025-2030年中國洗衣液市場未來發(fā)展趨勢及前景調(diào)研分析報告
- 2024解析:第三章物態(tài)變化-基礎(chǔ)練(解析版)
- 2023年江蘇省南京市中考化學(xué)真題
- 供電副所長述職報告
- 校園欺凌問題成因及對策分析研究論文
- 技術(shù)支持資料投標(biāo)書
- 老年人意外事件與與預(yù)防
- 預(yù)防艾滋病、梅毒和乙肝母嬰傳播轉(zhuǎn)介服務(wù)制度
- 《高速鐵路客運(yùn)安全與應(yīng)急處理》課程標(biāo)準(zhǔn)
評論
0/150
提交評論