Java-IO流

File類

  • File類是操作文件和文件目錄的類污桦,能新建针肥、刪除、重命名象迎、文件和目錄
  • 但File類不能訪問(wèn)文件本身的內(nèi)容荧嵌,如果需要訪問(wèn)文件內(nèi)容,則需要使用輸入/輸出流
  • File對(duì)象可以作為參數(shù)砾淌,傳遞給流的構(gòu)造器啦撮,是操作流的基礎(chǔ)

File類常用方法

public String getAbsolutePath():獲取絕對(duì)路徑
public String getPath() :獲取路徑
public String getName() :獲取名稱
public String getParent():獲取上層文件目錄路徑。若無(wú)汪厨,返回null
public long length() :獲取文件長(zhǎng)度(即:字節(jié)數(shù))赃春。不能獲取目錄的長(zhǎng)度。
public long lastModified() :獲取最后一次的修改時(shí)間骄崩,毫秒值
public String[] list() :獲取指定目錄下的所有文件或者文件目錄的名稱數(shù)組
public File[] listFiles() :獲取指定目錄下的所有文件或者文件目錄的File數(shù)組
public boolean createNewFile() :創(chuàng)建文件。若文件存在薄辅,則不創(chuàng)建要拂,返回false
public boolean mkdir() :創(chuàng)建文件目錄。如果此文件目錄存在站楚,就不創(chuàng)建了脱惰。如果此文件目錄的上層目錄不存在,也不創(chuàng)建窿春。
public boolean mkdirs() :創(chuàng)建文件目錄拉一。如果此文件目錄存在采盒,就不創(chuàng)建了。如果上層文件目錄不存在蔚润,一并創(chuàng)建
public boolean delete(): 刪除磁盤(pán)中的文件或文件目錄磅氨,刪除注意事項(xiàng):Java中的刪除不走回收站。

IO 原理

  • I/O是Input/Output的縮寫(xiě)嫡纠,用于處理設(shè)備之間的數(shù)據(jù)傳輸烦租,如讀/寫(xiě)文件,網(wǎng)絡(luò)通訊等
  • 在Java程序中除盏,對(duì)于數(shù)據(jù)的輸入/輸出操作叉橱,以"流"的方式進(jìn)行的
  • 輸入input:讀取外部數(shù)據(jù)(磁盤(pán)、光盤(pán)等存儲(chǔ)設(shè)備)到程序內(nèi)存中
  • 輸出output:將程序內(nèi)存的數(shù)據(jù)者蠕,輸出到存儲(chǔ)設(shè)備

流的分類

  • 按操作數(shù)據(jù)單位分類:字節(jié)流(8 bit)窃祝、字符流(16 bit),一個(gè)漢字2個(gè)字節(jié)
  • 按數(shù)據(jù)流的流向分類:輸入流踱侣、輸出流
  • 按流的角色的不同分類:節(jié)點(diǎn)流粪小、處理流(以Buffered開(kāi)頭的類)
  • 對(duì)于文本文件(.txt,.java,.c,.cpp),使用字符流處理
  • 對(duì)于非文本文件(.jpg,.mp3,.mp4,.avi,.doc,.ppt,...)泻仙,使用字節(jié)流處理糕再,如果用此處理文本,有可能會(huì)出現(xiàn)亂碼
流的基類

IO 體系

IO體系圖

常用流各自的應(yīng)用場(chǎng)景

字符流(操作字符串)

字符輸入流

1玉转、FileReader 字符輸入流:用于文本文件讀取操作突想,例:(.txt,.java,.c,.cpp)等文本文件
2、BufferedReader 緩沖區(qū)字符輸入流:用于提升使用 FileReader 在文件讀取方面的效率究抓,針對(duì)大文本文件的讀取
3猾担、InputStreamReader :將一個(gè)字節(jié)的輸入流轉(zhuǎn)換為字符的輸入流,可以設(shè)置指定字符流的編碼格式

字符輸出流

1刺下、FileWrite 字符輸出流:用于文本文件寫(xiě)入操作绑嘹,例:(.txt,.java,.c,.cpp)等文本文件
2、BufferedWriter 緩沖區(qū)字符輸出流:用于提升使用 FileWrite 在文件寫(xiě)入方面的效率橘茉,針對(duì)大文本文件的寫(xiě)入
3工腋、OutputStreamWriter :將一個(gè)字符的輸出流轉(zhuǎn)換為字節(jié)的輸出流,可以設(shè)置指定字符流的編碼格式

字節(jié)流(操作非文本)

字節(jié)輸入流

1畅卓、FileInputStream 字節(jié)輸入流:用于非文本文件讀取擅腰,例:(.jpg,.mp3,.mp4,.avi,.doc,.ppt)等
2、BufferedInputStream 緩沖區(qū)字節(jié)輸入流:用于提升使用 FileInputStream 在文件讀取方面的效率

字節(jié)輸出流

1翁潘、FileOutputStream 字節(jié)輸出流:用于非文本文件寫(xiě)入操作趁冈,例:(.jpg,.mp3,.mp4,.avi,.doc,.ppt)等
2、BufferedOutputStream 緩沖區(qū)字節(jié)輸出流:用于提升使用 FileoutputStream 在文件寫(xiě)入方面的效率

對(duì)象流

對(duì)象的序列化

  • ObjectOutputStream 序列化(寫(xiě)入操作):把內(nèi)存中的Java對(duì)象,轉(zhuǎn)換成平臺(tái)無(wú)關(guān)的二進(jìn)制流渗勘,從而方便保存到磁盤(pán)和網(wǎng)絡(luò)傳輸
  • ObjectInputStream 反序列化(讀取操作):把硬盤(pán)/網(wǎng)絡(luò)中的二進(jìn)制流還原成Java對(duì)象沐绒,方便程序調(diào)用

自定義類要想序列化、反序列化旺坠,需滿足以下要求
1乔遮、需要實(shí)現(xiàn)接口:Serializable
2、當(dāng)前類提供一個(gè)全局常量:serialVersionUID
3价淌、除了當(dāng)前Person類需要實(shí)現(xiàn)Serializable接口之外申眼,還必須保證其內(nèi)部所有屬性
也必須是可序列化的。(默認(rèn)情況下蝉衣,基本數(shù)據(jù)類型可序列化)

RandomAccessFile 隨機(jī)讀取寫(xiě)入操作類(應(yīng)用于:多線程繼點(diǎn)下載)

  • 1.RandomAccessFile直接繼承于java.lang.Object類括尸,實(shí)現(xiàn)了DataInput和DataOutput接口
  • 2.RandomAccessFile既可以作為一個(gè)輸入流,又可以作為一個(gè)輸出流
  • 3.如果RandomAccessFile作為輸出流時(shí)病毡,寫(xiě)出到的文件如果不存在濒翻,則在執(zhí)行過(guò)程中自動(dòng)創(chuàng)建,如果寫(xiě)出到的文件存在啦膜,則會(huì)對(duì)原有文件內(nèi)容進(jìn)行覆蓋有送。(默認(rèn)情況下,從頭覆蓋)
    1. 可以通過(guò)相關(guān)的操作僧家,實(shí)現(xiàn)RandomAccessFile“插入”數(shù)據(jù)的效果
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末雀摘,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子八拱,更是在濱河造成了極大的恐慌阵赠,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,743評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件肌稻,死亡現(xiàn)場(chǎng)離奇詭異清蚀,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)爹谭,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,296評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén)枷邪,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人诺凡,你說(shuō)我怎么就攤上這事东揣。” “怎么了腹泌?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,285評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵嘶卧,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我真屯,道長(zhǎng)脸候,這世上最難降的妖魔是什么穷娱? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,485評(píng)論 1 283
  • 正文 為了忘掉前任绑蔫,我火速辦了婚禮运沦,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘配深。我一直安慰自己携添,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,581評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布篓叶。 她就那樣靜靜地躺著烈掠,像睡著了一般。 火紅的嫁衣襯著肌膚如雪缸托。 梳的紋絲不亂的頭發(fā)上左敌,一...
    開(kāi)封第一講書(shū)人閱讀 49,821評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音俐镐,去河邊找鬼矫限。 笑死,一個(gè)胖子當(dāng)著我的面吹牛佩抹,可吹牛的內(nèi)容都是我干的叼风。 我是一名探鬼主播,決...
    沈念sama閱讀 38,960評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼棍苹,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼无宿!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起枢里,我...
    開(kāi)封第一講書(shū)人閱讀 37,719評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤孽鸡,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后坡垫,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體梭灿,經(jīng)...
    沈念sama閱讀 44,186評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,516評(píng)論 2 327
  • 正文 我和宋清朗相戀三年冰悠,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了堡妒。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,650評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡溉卓,死狀恐怖皮迟,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情桑寨,我是刑警寧澤伏尼,帶...
    沈念sama閱讀 34,329評(píng)論 4 330
  • 正文 年R本政府宣布,位于F島的核電站尉尾,受9級(jí)特大地震影響爆阶,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,936評(píng)論 3 313
  • 文/蒙蒙 一辨图、第九天 我趴在偏房一處隱蔽的房頂上張望班套。 院中可真熱鬧,春花似錦故河、人聲如沸吱韭。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,757評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)理盆。三九已至,卻和暖如春凑阶,著一層夾襖步出監(jiān)牢的瞬間猿规,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,991評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工宙橱, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留坎拐,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,370評(píng)論 2 360
  • 正文 我出身青樓养匈,卻偏偏與公主長(zhǎng)得像哼勇,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子呕乎,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,527評(píng)論 2 349

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

  • 標(biāo)準(zhǔn)輸入輸出积担,文件的操作,網(wǎng)絡(luò)上的數(shù)據(jù)流猬仁,字符串流帝璧,對(duì)象流,zip文件流等等湿刽,java中將輸入輸出抽象稱為流的烁,就好...
    navy_legend閱讀 707評(píng)論 0 0
  • 1.流的分類 (1)輸入輸出流輸入輸出是針對(duì)程序運(yùn)行的內(nèi)存而言的輸入流的基類:InputStream,Reader...
    ql2012jz閱讀 576評(píng)論 0 3
  • 本篇文章主要圍繞字符編碼展開(kāi)诈闺,為了能夠更好地講述這一主題渴庆,我將從字節(jié)流操作中文數(shù)據(jù)開(kāi)始。 字節(jié)流操作中文數(shù)據(jù) 假設(shè)...
    北京大數(shù)據(jù)蘇煥之閱讀 400評(píng)論 0 0
  • Java流操作有關(guān)的類或接口: Java流類圖結(jié)構(gòu): 流的概念和作用 流是一組有順序的雅镊,有起點(diǎn)和終點(diǎn)的字節(jié)集合襟雷,是...
    dazzlingly閱讀 1,331評(píng)論 0 15
  • Java流操作有關(guān)的類或接口: Java流類圖結(jié)構(gòu): 流的概念和作用 流是一組有順序的,有起點(diǎn)和終點(diǎn)的字節(jié)集合仁烹,是...
    愛(ài)動(dòng)腦的程序員閱讀 153評(píng)論 0 0