Java全面解析IO流相關(guān)知識(shí)
IO流相關(guān)知識(shí)(File,字節(jié)流,字符流,特殊操作流(標(biāo)準(zhǔn)輸入流,標(biāo)準(zhǔn)輸出流,對(duì)象序列化與反序列化,properties與IO流結(jié)合))相關(guān)知識(shí)總結(jié)
前言
流是一種抽象概念,它代表了數(shù)據(jù)的無結(jié)構(gòu)化傳遞。按照流的方式進(jìn)行輸入輸出,數(shù)據(jù)被當(dāng)成無結(jié)構(gòu)的字節(jié)序或字符序列。從流中取得數(shù)據(jù)的操作稱為提取操作,而向流中添加數(shù)據(jù)的操作稱為插入操作。用來進(jìn)行輸入輸出操作的流就稱為IO流。換句話說,IO流就是以流的方式進(jìn)行輸入輸出
一、File
1.File類的概述和構(gòu)造方法
通過如上的圖相信對(duì)文件打的相關(guān)應(yīng)用已經(jīng)有了初步的認(rèn)識(shí),因?yàn)榉庋b的不是真正存在的文件,僅僅是一個(gè)路徑名而已,所以沒有那個(gè)路徑的文件也可以寫,不會(huì)報(bào)錯(cuò),將來是把不存在的轉(zhuǎn)換為具體存在的。
2.File類創(chuàng)建功能
這里需要注意的是:不能根據(jù)目錄來判斷是創(chuàng)建的文件還是目錄,而是通過調(diào)用的方法來判斷的,路徑那個(gè)只是名字而已,文件和目錄的名字也不能是一樣的
3.File類判斷和獲取功能
4.File類刪除功能
注意:File的相關(guān)操作與字節(jié)流沒有繼承的關(guān)系,所以要?jiǎng)h除文件的話還是的用File的刪除功能才可
二、字節(jié)流
1.IO流的概述和分類
概述
分類
2.字節(jié)流寫數(shù)據(jù)
記得一定要釋放資源
3.字節(jié)流寫數(shù)據(jù)的兩個(gè)小問題
字節(jié)流寫數(shù)據(jù)如何換行
不同的操作系統(tǒng)的換行是不一樣的
字節(jié)流寫數(shù)據(jù)如何實(shí)現(xiàn)追加寫入
值得注意的是是在文件的后面添加,而原來的數(shù)據(jù)還是有的,所以在用的時(shí)候就要考慮一下是怎樣使用自己的文件的
4.字節(jié)流寫入數(shù)據(jù)假異常處理
就是簡單的異常處理而已,如果不使用處理的話就拋出就可以了
5.字節(jié)流讀數(shù)據(jù)(重點(diǎn))
一次讀一個(gè)字節(jié)的數(shù)據(jù)
標(biāo)準(zhǔn)的代碼格式就是這樣的
一次讀一個(gè)數(shù)組的數(shù)據(jù)
字節(jié)流讀數(shù)據(jù)其實(shí)很簡單,這里需要注意的是字節(jié)流讀數(shù)據(jù)的話可以有兩種方法,至于使用怎樣的方法就得取決于自己得使用就行了
6.字節(jié)緩沖流
7.如何選擇怎樣得數(shù)據(jù)讀取呢?
從圖中可以看出字節(jié)緩沖流得讀取比基本得字節(jié)讀取要快很多,如果要節(jié)省時(shí)間得話就可以考慮用字節(jié)緩沖流來進(jìn)行字節(jié)流得讀取
三、字符流
1.為什么會(huì)出現(xiàn)字符流?
所以他的底層操作的實(shí)質(zhì)還是字節(jié)流
編碼表
這里需要注意的是用的什么編碼就必須用對(duì)應(yīng)的解碼,否則就會(huì)出現(xiàn)亂碼的情況
2.字符串中的編碼解碼問題
3.如何實(shí)現(xiàn)解決編譯解碼的問題
其實(shí)寫的時(shí)候是寫在了緩沖區(qū),并沒寫在文件里,可以刷新,也可以關(guān)閉流它會(huì)自動(dòng)的刷新
代碼理解
4.字符流寫數(shù)據(jù)的方法
5.字符流讀數(shù)據(jù)的方法
字節(jié)流與字符流的讀數(shù)據(jù)的思想是一樣的只不過一個(gè)是字符,一個(gè)是字節(jié)而已
6.字符流復(fù)制文件
其方法和字節(jié)流的方法一樣,只是一個(gè)是字節(jié)一個(gè)是字符而已
方法一:一個(gè)一個(gè)的字符進(jìn)行的復(fù)制
方法二:一個(gè)字符數(shù)組一個(gè)字符數(shù)組的復(fù)制
準(zhǔn)換流
OutputStreamWriter 他又一個(gè)子類是:FileWriter
InputStreamReader 它有一個(gè)子類是: FileReader
我們?cè)趶?fù)制文件等相關(guān)操作的時(shí)候可以用他的子類進(jìn)行操作,書寫更加的簡單,但是,在進(jìn)行編碼問題解決的時(shí)候還是得用轉(zhuǎn)換流才可以
7.字符緩沖流
字符緩沖流的特有功能
那么可以做什么呢?
我們可以通過其中特有的功能進(jìn)行文件的復(fù)制等
需要注意的是readline只是讀的是內(nèi)容,不讀其他的
8.字節(jié),字符流小結(jié)
(此時(shí)有個(gè)使用的問題就是用哪兒文件的讀取就寫哪兒,寫在一起容易出問題,還有就是一定要釋放資源)
字節(jié)流
字符流
關(guān)于亂碼的問題
個(gè)人認(rèn)為出現(xiàn)亂碼是因?yàn)槿绻玫氖亲止?jié)流的話用char來強(qiáng)制轉(zhuǎn)換顯示的話就是只有其中的一部分并沒有把一個(gè)漢字的那個(gè)文字表達(dá)組如(【-1,23,36】)表達(dá)完整,但是如果用new String()來顯示的話會(huì)表達(dá)完整(可能是里面有相應(yīng)的方法,具體不清楚,知道就行了),如果用的是字符流的話就是用的默認(rèn)的編碼以及你相應(yīng)要求的編碼來表達(dá),所以就不會(huì)出現(xiàn)亂碼的問題了
9.復(fù)制文件的異常處理
四、特殊操作流
1.標(biāo)準(zhǔn)輸入流
2.標(biāo)準(zhǔn)輸出流
3.打印流
字節(jié)打印流
字符打印流
4.對(duì)象序列化流與對(duì)象反序列化流(它是基于字節(jié)流上的)
對(duì)象序列化流
對(duì)象反序列化流
5.解決對(duì)象序列化流的三個(gè)問題
6.Properties
代碼理解(properties作為map集合的使用)
properties作為集合特有的方法
第一個(gè)是寫數(shù)據(jù)進(jìn)入集合
第二個(gè)是根據(jù)鍵得到值
第三個(gè)是得到鍵得集合
Properties和IO流結(jié)合的方法
集合數(shù)據(jù)寫到文件
文件寫到集合
總結(jié)
IO流其實(shí)很簡單,重點(diǎn)是要掌握其中的字節(jié)流讀寫方法,以及字符流的讀寫方法和Properties與IO流結(jié)合的進(jìn)行使用。
到此這篇關(guān)于Java全面解析IO流相關(guān)知識(shí)的文章就介紹到這了,更多相關(guān)Java IO流內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Spring整合Quartz實(shí)現(xiàn)動(dòng)態(tài)定時(shí)器的示例代碼
本篇文章主要介紹了Spring整合Quartz實(shí)現(xiàn)動(dòng)態(tài)定時(shí)器的示例代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2017-01-01spring?boot自動(dòng)裝配之@ComponentScan注解用法詳解
@ComponentScan的作用就是根據(jù)定義的掃描路徑,把符合掃描規(guī)則的類裝配到spring容器中,下面這篇文章主要給大家介紹了關(guān)于spring?boot自動(dòng)裝配之@ComponentScan注解用法的相關(guān)資料,需要的朋友可以參考下2023-04-04Java編程Socket實(shí)現(xiàn)多個(gè)客戶端連接同一個(gè)服務(wù)端代碼
這篇文章主要介紹了Java編程Socket實(shí)現(xiàn)多個(gè)客戶端連接同一個(gè)服務(wù)端代碼,具有一定參考價(jià)值,需要的朋友可以了解下。2017-11-11Java中5種方式實(shí)現(xiàn)String反轉(zhuǎn)
下面小編就為大家?guī)硪黄狫ava中5種方式實(shí)現(xiàn)String反轉(zhuǎn)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。2016-06-06Springboot?前后端分離項(xiàng)目使用?POI?生成并導(dǎo)出?Excel的操作方法
在做一個(gè)?SpringBoot?前后端分離項(xiàng)目的時(shí)候,需要將數(shù)據(jù)存到?Excel中,用戶可以下載?Excel,具體實(shí)現(xiàn)是采用?Apache?強(qiáng)大的?POI,本文給大家介紹Springboot?前后端分離項(xiàng)目使用?POI?生成并導(dǎo)出?Excel相關(guān)知識(shí),感興趣的朋友一起看看吧2023-09-09JFreeChart插件實(shí)現(xiàn)的折線圖效果實(shí)例
這篇文章主要介紹了JFreeChart插件實(shí)現(xiàn)的折線圖效果,結(jié)合實(shí)例形式分析了基于JFreeChart繪制折線圖的相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2016-08-08