JAVA進階知識學習-day09 IO流&字符字節(jié)流&屬性集

一、IO概述

1.1?Java中I/O操作主要是指使用java.io包下的內(nèi)容,進行輸入拧略、輸出操作。輸入也叫做讀取數(shù)據(jù)瘪弓,輸出也叫做作寫出數(shù)據(jù)垫蛆。

1.2 IO的分類

根據(jù)數(shù)據(jù)的流向分為:輸入流和輸出流。?

輸入流 :把數(shù)據(jù)從其他設備上讀取到內(nèi)存中的流腺怯。?

輸出流 :把數(shù)據(jù)從內(nèi)存中寫出到其他設備上的流袱饭。


根據(jù)數(shù)據(jù)的類型分為:字節(jié)流和字符流。?

字節(jié)流 :以字節(jié)為單位呛占,讀寫數(shù)據(jù)的流虑乖。?

字符流 :以字符為單位,讀寫數(shù)據(jù)的流晾虑。

1.3 頂級父類們

二疹味、字節(jié)流

2.1 一切皆為字節(jié):一切文件數(shù)據(jù)(文本、圖片帜篇、視頻等)在存儲時糙捺,都是以二進制數(shù)字的形式保存,傳輸時一樣如此笙隙。所以洪灯,字節(jié)流可以傳輸任意文件數(shù)據(jù)。在操作流的時候竟痰,我們要時刻明確签钩,無論使用什么樣的流對象,底層傳輸?shù)氖冀K為二進制數(shù)據(jù)坏快。

2.2 字節(jié)輸出流OutputStream:java.io.OutputStream抽象類是表示字節(jié)輸出流的所有類的超類铅檩,將指定的字節(jié)信息寫出到目的地。它定義了字節(jié)輸出流的基本共性功能方法假消。

2.2.1 常用方法:

public void close() :關閉此輸出流并釋放與此流相關聯(lián)的任何系統(tǒng)資源柠并。?

public void flush() :刷新此輸出流并強制任何緩沖的輸出字節(jié)被寫出岭接。?

public void write(byte[] b) :將b.length字節(jié)從指定的字節(jié)數(shù)組寫入此輸出流富拗。?

public void write(byte[] b, int off, int len) :從指定的字節(jié)數(shù)組寫入len字節(jié),從偏移量 off開始輸出到此輸出流鸣戴。?

public abstract void write(int b) :將指定的字節(jié)輸出流啃沪。

2.3 FileOutputStream類:java.io.FileOutputStream類是文件輸出流,用于將數(shù)據(jù)寫出到文件窄锅。

2.3.1?構造方法:?

public FileOutputStream(File file):創(chuàng)建文件輸出流以寫入指定的File對象表示的文件创千。?

public FileOutputStream(String name) : 創(chuàng)建文件輸出流以指定的名稱寫入文件缰雇。

注意事項:當你創(chuàng)建一個流對象時,必須傳入一個文件路徑追驴。該路徑下械哟,如果沒有這個文件,會創(chuàng)建該文件殿雪。如果有這個文件暇咆,會清空這個文件的數(shù)據(jù)。

2.3.2?代碼演示:

2.3.3寫出數(shù)據(jù)的常用方法:

write(int b) :每次可以寫出一個字節(jié)數(shù)據(jù)

write(byte[] b) :每次可以寫出數(shù)組中的數(shù)據(jù)

write(byte[] b, int off, int len) ,每次寫出從off索引開始丙曙,len個字節(jié)

2.3.4?寫出數(shù)據(jù)的代碼演示:

2.4?數(shù)據(jù)追加續(xù)寫

public FileOutputStream(File file, boolean append) :創(chuàng)建文件輸出流以寫入由指定的 File對象表示的文件爸业。?

public FileOutputStream(String name, boolean append) : 創(chuàng)建文件輸出流以指定的名稱寫入文件。

注意:?append為true表示追加數(shù)據(jù)亏镰,false表示清空原有數(shù)據(jù)扯旷。 這樣創(chuàng)建的輸出流對象,就可以指定是否追加續(xù)寫了

2.5?數(shù)據(jù)寫出換行:Windows系統(tǒng)里索抓,換行符號是\r\n钧忽。

2.5.1?使用演示:fos.write("\r\n".getBytes());

2.6 字節(jié)輸入流InputStream:java.io.InputStream 抽象類是表示字節(jié)輸入流的所有類的超類,可以讀取字節(jié)信息到內(nèi)存中逼肯。它定義了字節(jié)輸入流的基本共性功能方法惰瓜。

2.6.1?常用方法:

public void close():關閉此輸入流并釋放與此流相關聯(lián)的任何系統(tǒng)資源。?

public abstract int read() :從輸入流讀取數(shù)據(jù)的下一個字節(jié)汉矿。?

public int read(byte[] b) :從輸入流中讀取一些字節(jié)數(shù)崎坊,并將它們存儲到字節(jié)數(shù)組b中

2.7?FileInputStream類:java.io.FileInputStream 類是文件輸入流,從文件中讀取字節(jié)洲拇。

2.7.1?構造方法:

FileInputStream(File file) :通過打開與實際文件的連接來創(chuàng)建一個FileInputStream 奈揍,該文件由文件系統(tǒng)中的File對象file命名。?

FileInputStream(String name) :通過打開與實際文件的連接來創(chuàng)建一個 FileInputStream 赋续,該文件由文件系統(tǒng)中的路徑名name命名男翰。

2.7.2 注意事項:當你創(chuàng)建一個流對象時,必須傳入一個文件路徑纽乱。該路徑下蛾绎,如果沒有該文件,會拋出FileNotFoundException。

2.7.3?讀取字節(jié)數(shù)據(jù):?

1. 讀取字節(jié): read 方法鸦列,每次可以讀取一個字節(jié)的數(shù)據(jù)租冠,提升為int類型,讀取到文件末尾薯嗤,返回 -1?

2. 使用字節(jié)數(shù)組讀韧绲: read(byte[] b) ,每次讀取b的長度個字節(jié)到數(shù)組中骆姐,返回讀取到的有效字節(jié)個數(shù)镜粤,讀取到末尾時捏题,返回 -1

2.8 字節(jié)流練習:圖片復制

2.8.1?復制原理分析:從已有文件中讀取字節(jié),將該字節(jié)寫出到另一個文件中

2.8.2?代碼演示:

三肉渴、字符流

3.1?當使用字節(jié)流讀取文本文件時公荧,可能會有一個小問題。就是遇到中文字符時同规,可能不會顯示完整的字符稚矿,那是因為 一個中文字符可能占用多個字節(jié)存儲。所以Java提供一些字符流類捻浦,以字符為單位讀寫數(shù)據(jù)晤揣,專門用于處理文本文件。

3.2?字符輸入流Reader:java.io.Reader抽象類是表示用于讀取字符流的所有類的超類朱灿,可以讀取字符信息到內(nèi)存中昧识。它定義了字符輸入流的基本共性功能方法。

3.2.1?常用方法:

public void close():關閉此流并釋放與此流相關聯(lián)的任何系統(tǒng)資源盗扒。?

public int read():從輸入流讀取一個字符跪楞。?

public int read(char[] cbuf) : 從輸入流中讀取一些字符,并將它們存儲到字符數(shù)組cbuf中侣灶。

3.3 FileReader類:java.io.FileReader類是讀取字符文件的便利類甸祭。構造時使用系統(tǒng)默認的字符編碼和默認字節(jié)緩沖區(qū)。

3.3.1?構造方法:

FileReader(File file):創(chuàng)建一個新的 FileReader 褥影,給定要讀取的File對象池户。 FileReader(String fileName):創(chuàng)建一個新的 FileReader ,給定要讀取的文件的名稱凡怎。

3.3.2?讀取字符數(shù)據(jù):

1. 讀取字符:read方法校焦,每次可以讀取一個字符的數(shù)據(jù),提升為int類型统倒,讀取到文件末尾寨典,返回 -1 ,循環(huán)讀取

2. 使用字符數(shù)組讀确看摇:read(char[] cbuf) 耸成,每次讀取b的長度個字符到數(shù)組中,返回讀取到的有效字符個數(shù)浴鸿, 讀取到末尾時井氢,返回 -1

3.4 字符輸出流Writer:java.io.Writer 抽象類是表示用于寫出字符流的所有類的超類,將指定的字符信息寫出到目的地赚楚。它定義了字節(jié)輸出流的基本共性功能方法毙沾。

3.4.1?構造方法:

void write(int c) 寫入單個字符。?

void write(char[] cbuf) 寫入字符數(shù)組宠页。?

abstract void write(char[] cbuf, int off, int len) 寫入字符數(shù)組的某一部分,off數(shù)組的開始索引,len寫的字符個數(shù)左胞。?

void write(String str) 寫入字符串。?

void write(String str, int off, int len)寫入字符串的某一部分,off字符串的開始索引,len寫的字符個數(shù)举户。?

void flush() 刷新該流的緩沖烤宙。?

void close() 關閉此流,但要先刷新它俭嘁。

3.5?FileWriter類:java.io.FileWriter類是寫出字符到文件的便利類躺枕。構造時使用系統(tǒng)默認的字符編碼和默認字節(jié)緩沖區(qū)。

3.5.1?構造方法:

FileWriter(File file) :創(chuàng)建一個新的 FileWriter供填,給定要讀取的File對象拐云。 FileWriter(String fileName) :創(chuàng)建一個新的 FileWriter,給定要讀取的文件的名稱近她。

3.5.2?基本寫出數(shù)據(jù):

1.寫出字符: write(int b) 方法叉瘩,每次可以寫出一個字符數(shù)據(jù)

2.寫出字符數(shù)組:write(char[] cbuf)?

3.寫出指定長度的字符數(shù)組:write(char[] cbuf, int off, int len)?

4.寫出字符串:write(String str)

5.寫出指定長度的字符串:write(String str, int off, int len)

3.5.3 注意事項:未調(diào)用close方法,數(shù)據(jù)只是保存到了緩沖區(qū)粘捎,并未寫出到文件中薇缅。

3.5.4?關閉和刷新:因為內(nèi)置緩沖區(qū)的原因,如果不關閉輸出流攒磨,無法寫出字符到文件中泳桦。但是關閉的流對象,是無法繼續(xù)寫出數(shù)據(jù)的娩缰。如果我們既想寫出數(shù)據(jù)灸撰,又想繼續(xù)使用流,就需要 flush 方法了拼坎。

flush:刷新緩沖區(qū)梧奢,流對象可以繼續(xù)使用。?

close:先刷新緩沖區(qū)演痒,然后通知系統(tǒng)釋放資源亲轨。流對象不可以再被使用了。

四鸟顺、IO異常的處理

4.1?之前的入門練習惦蚊,我們一直把異常拋出,而實際開發(fā)中并不能這樣處理讯嫂,建議使用 try...catch...finally代碼塊蹦锋,處理異常部分

4.2 JDK9改進的代碼演示:

五、屬性集

5.1?java.util.Properties繼承于Hashtable欧芽,來表示一個持久的屬性集莉掂。它使用鍵值結構存儲數(shù)據(jù),每個鍵及其對應值都是一個字符串千扔。

5.2 Properties類

5.2.1 構造方法:

public Properties() :創(chuàng)建一個空的屬性列表憎妙。?

5.2.2 基本的存儲方法:

public Object setProperty(String key, String value) : 保存一對屬性库正。?

public String getProperty(String key) :使用此屬性列表中指定的鍵搜索屬性值。 public Set stringPropertyNames() :所有鍵的名稱的集合厘唾。

5.2.3?與流相關的方法:?

public void load(InputStream inStream) : 從字節(jié)輸入流中讀取鍵值對褥符。

5.2.3.1?代碼演示:

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市抚垃,隨后出現(xiàn)的幾起案子喷楣,更是在濱河造成了極大的恐慌,老刑警劉巖鹤树,帶你破解...
    沈念sama閱讀 222,729評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件铣焊,死亡現(xiàn)場離奇詭異,居然都是意外死亡罕伯,警方通過查閱死者的電腦和手機曲伊,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,226評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來捣炬,“玉大人熊昌,你說我怎么就攤上這事∈幔” “怎么了婿屹?”我有些...
    開封第一講書人閱讀 169,461評論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長推溃。 經(jīng)常有香客問我昂利,道長,這世上最難降的妖魔是什么铁坎? 我笑而不...
    開封第一講書人閱讀 60,135評論 1 300
  • 正文 為了忘掉前任蜂奸,我火速辦了婚禮,結果婚禮上硬萍,老公的妹妹穿的比我還像新娘扩所。我一直安慰自己,他們只是感情好朴乖,可當我...
    茶點故事閱讀 69,130評論 6 398
  • 文/花漫 我一把揭開白布祖屏。 她就那樣靜靜地躺著,像睡著了一般买羞。 火紅的嫁衣襯著肌膚如雪袁勺。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,736評論 1 312
  • 那天畜普,我揣著相機與錄音期丰,去河邊找鬼。 笑死,一個胖子當著我的面吹牛钝荡,可吹牛的內(nèi)容都是我干的街立。 我是一名探鬼主播,決...
    沈念sama閱讀 41,179評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼化撕,長吁一口氣:“原來是場噩夢啊……” “哼几晤!你這毒婦竟也來了约炎?” 一聲冷哼從身側響起植阴,我...
    開封第一講書人閱讀 40,124評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎圾浅,沒想到半個月后掠手,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,657評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡狸捕,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,723評論 3 342
  • 正文 我和宋清朗相戀三年喷鸽,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片灸拍。...
    茶點故事閱讀 40,872評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡做祝,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出鸡岗,到底是詐尸還是另有隱情混槐,我是刑警寧澤,帶...
    沈念sama閱讀 36,533評論 5 351
  • 正文 年R本政府宣布轩性,位于F島的核電站声登,受9級特大地震影響,放射性物質發(fā)生泄漏揣苏。R本人自食惡果不足惜悯嗓,卻給世界環(huán)境...
    茶點故事閱讀 42,213評論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望卸察。 院中可真熱鬧脯厨,春花似錦、人聲如沸坑质。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,700評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽洪乍。三九已至眯杏,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間壳澳,已是汗流浹背岂贩。 一陣腳步聲響...
    開封第一講書人閱讀 33,819評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人萎津。 一個月前我還...
    沈念sama閱讀 49,304評論 3 379
  • 正文 我出身青樓卸伞,卻偏偏與公主長得像,于是被迫代替她去往敵國和親锉屈。 傳聞我的和親對象是個殘疾皇子荤傲,可洞房花燭夜當晚...
    茶點故事閱讀 45,876評論 2 361

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