Java文件操作

? ? ? ?套路是如今比較流行的一個詞翘瓮,在最近的學(xué)習(xí)中呼盆,我也發(fā)現(xiàn)了很多編程方面的套路。今天就來談?wù)凧ava文件操作中的一些套路寂殉。

? ? ? ?Java文件操作的套路大體上可以分為三步走:1.聲明IO流村怪。2.使用流。3.關(guān)閉流。我們先來討論比較簡單的第一步和第三步介时。在這之前我們先分析一段初學(xué)者寫的聲明流和關(guān)閉流:

圖1

? ? ? ? 相信好多人都是這樣做的,但考慮這樣一個問題,如果在fis或fos進(jìn)行讀寫的過程中目標(biāo)文件被刪或出現(xiàn)其他問題宏多,那么程序會中斷,并拋出異常,而此時fis和fos未被關(guān)閉,那么問題來了,這樣合理嗎萌业?

? ? ? ?所以相對合理的寫法應(yīng)該是這樣的:

圖 2

? ? ? ?這就是第一步和第三步的套路:在聲明IO流時聲明在try外,實例化時在try內(nèi),而在關(guān)閉IO流時,在finally內(nèi)去關(guān)閉卡睦,這樣無論發(fā)生怎樣的異常表锻,fis和fos都一定會被關(guān)閉,從而保證安全性。

? ? ? ?其它的流都可以套用這一套路:聲明在try外旨巷,實例化時在try內(nèi)乏冀,關(guān)閉在finally內(nèi)郊闯。

? ? ? ?接下來我們來重點討論一下三步走中的第二步:

? ? ? Java中的文件讀取大體可分為按字節(jié)(byte)讀取和按字符(char)讀取,圖一和圖二都是按字節(jié)來讀取的析蝴。而在按字節(jié)讀取的時候闷畸,如果緩存區(qū)的大小設(shè)為單數(shù)字節(jié)的話倘待,例如byte[5],那么在對中文進(jìn)行讀取的時候就會發(fā)生亂碼,因為中文的編碼是兩個字節(jié)。所以在讀取時最好設(shè)置緩沖區(qū)長度為偶數(shù)或者以字符的來讀取鞠眉。

? ? ? ?按字節(jié)讀取哗戈,圖一圖二以作示例,不再討論顶掉;

? ? ? ?按字符讀取的話要借助于按字節(jié)讀取,如例:

FileInputStream fis = null;

InputStreamReader reader = null;

fis = new FileInputStream("text.txt");

reader = new InputStreamReader(fis);

? ? ? ?一個指向InputStreamReader的reader變量實例化的時候要以一個FileInputStream類型的變量作為構(gòu)造函數(shù)的參數(shù)解藻,接下來我們就可以設(shè)置一個字符數(shù)組作為緩沖區(qū)來進(jìn)行讀寫了:

FileInputStream fis = null;

InputStreamReader reader = null;

FileWriter fw = null;

fis = new FileInputStream("text.txt");

reader = new InputStreamReader(fis);

fw = new FileWriter("result.txt");

char[] b = new char[512];

int len = 0;

while ((len = reader.read(b)) > 0){

fw.write(b, 0, len);

}

? ? 要注意的是在用什么方式讀入的時候老充,就要用什么方式來寫入,這里我用的InputStreamReader來讀螟左,用FileWriter來寫入啡浊,還有其他的類也可以寫入字符,可以靈活選擇胶背。

? ? 我們?nèi)绻幌朐O(shè)置緩沖區(qū)的話巷嚣,可以用BufferedReader類來進(jìn)行一行的讀取,這需要一個InputStreamReader類的變量來作為構(gòu)造函數(shù)的參數(shù)钳吟,這里我們可以發(fā)現(xiàn)一個現(xiàn)象廷粒,InputStream,InputStreamReader红且,BufferedReader這三個類是有一定的實例化順序的:InputStream>InputStreamReader>BufferedReader坝茎,從數(shù)據(jù)形式的角度來看是這樣的byte-》char-》String,一個字符有一個或兩個字節(jié)組成暇番,一個字符串由多個字符組成景东,這樣也就不難理解為啥這三個類要嵌套使用了。也正是因為這樣奔誓,在關(guān)閉這三個流的時候要先關(guān)閉最底層的:InputStream<InputStreamReader<BufferedReader斤吐,這樣就保證了其安全性搔涝。

其他要注意的問題:

? ? ? 1.在寫入時默認(rèn)覆蓋寫入,可以通過FileInputStream("test.txt",true);這種構(gòu)造函數(shù)來在其結(jié)尾寫入和措。

? ? ? 2.讀的時候調(diào)用合理的組件可以加快讀入的速度庄呈,在寫的時候,可以以緩存的類來寫入派阱,有利于保護(hù)磁盤诬留,如BufferedOutputStream。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末贫母,一起剝皮案震驚了整個濱河市文兑,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌腺劣,老刑警劉巖绿贞,帶你破解...
    沈念sama閱讀 211,194評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異橘原,居然都是意外死亡籍铁,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評論 2 385
  • 文/潘曉璐 我一進(jìn)店門趾断,熙熙樓的掌柜王于貴愁眉苦臉地迎上來拒名,“玉大人,你說我怎么就攤上這事芋酌≡鱿裕” “怎么了?”我有些...
    開封第一講書人閱讀 156,780評論 0 346
  • 文/不壞的土叔 我叫張陵脐帝,是天一觀的道長同云。 經(jīng)常有香客問我,道長腮恩,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,388評論 1 283
  • 正文 為了忘掉前任温兼,我火速辦了婚禮秸滴,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘募判。我一直安慰自己荡含,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,430評論 5 384
  • 文/花漫 我一把揭開白布届垫。 她就那樣靜靜地躺著释液,像睡著了一般。 火紅的嫁衣襯著肌膚如雪装处。 梳的紋絲不亂的頭發(fā)上误债,一...
    開封第一講書人閱讀 49,764評論 1 290
  • 那天浸船,我揣著相機(jī)與錄音,去河邊找鬼寝蹈。 笑死李命,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的箫老。 我是一名探鬼主播封字,決...
    沈念sama閱讀 38,907評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼耍鬓!你這毒婦竟也來了阔籽?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,679評論 0 266
  • 序言:老撾萬榮一對情侶失蹤牲蜀,失蹤者是張志新(化名)和其女友劉穎笆制,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體各薇,經(jīng)...
    沈念sama閱讀 44,122評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡项贺,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,459評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了峭判。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片开缎。...
    茶點故事閱讀 38,605評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖林螃,靈堂內(nèi)的尸體忽然破棺而出奕删,到底是詐尸還是另有隱情,我是刑警寧澤疗认,帶...
    沈念sama閱讀 34,270評論 4 329
  • 正文 年R本政府宣布完残,位于F島的核電站,受9級特大地震影響横漏,放射性物質(zhì)發(fā)生泄漏谨设。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,867評論 3 312
  • 文/蒙蒙 一缎浇、第九天 我趴在偏房一處隱蔽的房頂上張望扎拣。 院中可真熱鬧,春花似錦素跺、人聲如沸二蓝。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽刊愚。三九已至,卻和暖如春踩验,著一層夾襖步出監(jiān)牢的瞬間鸥诽,已是汗流浹背商玫。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留衙传,地道東北人决帖。 一個月前我還...
    沈念sama閱讀 46,297評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像蓖捶,于是被迫代替她去往敵國和親地回。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,472評論 2 348

推薦閱讀更多精彩內(nèi)容