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ù)的無(wú)結(jié)構(gòu)化傳遞。按照流的方式進(jìn)行輸入輸出,數(shù)據(jù)被當(dāng)成無(wú)結(jié)構(gòu)的字節(jié)序或字符序列。從流中取得數(shù)據(jù)的操作稱(chēng)為提取操作,而向流中添加數(shù)據(jù)的操作稱(chēng)為插入操作。用來(lái)進(jìn)行輸入輸出操作的流就稱(chēng)為IO流。換句話說(shuō),IO流就是以流的方式進(jìn)行輸入輸出
一、File
1.File類(lèi)的概述和構(gòu)造方法


通過(guò)如上的圖相信對(duì)文件打的相關(guān)應(yīng)用已經(jīng)有了初步的認(rèn)識(shí),因?yàn)榉庋b的不是真正存在的文件,僅僅是一個(gè)路徑名而已,所以沒(méi)有那個(gè)路徑的文件也可以寫(xiě),不會(huì)報(bào)錯(cuò),將來(lái)是把不存在的轉(zhuǎn)換為具體存在的。
2.File類(lèi)創(chuàng)建功能

這里需要注意的是:不能根據(jù)目錄來(lái)判斷是創(chuàng)建的文件還是目錄,而是通過(guò)調(diào)用的方法來(lái)判斷的,路徑那個(gè)只是名字而已,文件和目錄的名字也不能是一樣的
3.File類(lèi)判斷和獲取功能

4.File類(lèi)刪除功能

注意:File的相關(guān)操作與字節(jié)流沒(méi)有繼承的關(guān)系,所以要?jiǎng)h除文件的話還是的用File的刪除功能才可
二、字節(jié)流
1.IO流的概述和分類(lèi)
概述

分類(lèi)

2.字節(jié)流寫(xiě)數(shù)據(jù)

記得一定要釋放資源
3.字節(jié)流寫(xiě)數(shù)據(jù)的兩個(gè)小問(wèn)題
字節(jié)流寫(xiě)數(shù)據(jù)如何換行

不同的操作系統(tǒng)的換行是不一樣的
字節(jié)流寫(xiě)數(shù)據(jù)如何實(shí)現(xiàn)追加寫(xiě)入

值得注意的是是在文件的后面添加,而原來(lái)的數(shù)據(jù)還是有的,所以在用的時(shí)候就要考慮一下是怎樣使用自己的文件的
4.字節(jié)流寫(xiě)入數(shù)據(jù)假異常處理

就是簡(jiǎn)單的異常處理而已,如果不使用處理的話就拋出就可以了
5.字節(jié)流讀數(shù)據(jù)(重點(diǎn))
一次讀一個(gè)字節(jié)的數(shù)據(jù)

標(biāo)準(zhǔn)的代碼格式就是這樣的

一次讀一個(gè)數(shù)組的數(shù)據(jù)


字節(jié)流讀數(shù)據(jù)其實(shí)很簡(jiǎn)單,這里需要注意的是字節(jié)流讀數(shù)據(jù)的話可以有兩種方法,至于使用怎樣的方法就得取決于自己得使用就行了
6.字節(jié)緩沖流


7.如何選擇怎樣得數(shù)據(jù)讀取呢?

從圖中可以看出字節(jié)緩沖流得讀取比基本得字節(jié)讀取要快很多,如果要節(jié)省時(shí)間得話就可以考慮用字節(jié)緩沖流來(lái)進(jìn)行字節(jié)流得讀取
三、字符流
1.為什么會(huì)出現(xiàn)字符流?

所以他的底層操作的實(shí)質(zhì)還是字節(jié)流
編碼表

這里需要注意的是用的什么編碼就必須用對(duì)應(yīng)的解碼,否則就會(huì)出現(xiàn)亂碼的情況
2.字符串中的編碼解碼問(wèn)題


3.如何實(shí)現(xiàn)解決編譯解碼的問(wèn)題

其實(shí)寫(xiě)的時(shí)候是寫(xiě)在了緩沖區(qū),并沒(méi)寫(xiě)在文件里,可以刷新,也可以關(guān)閉流它會(huì)自動(dòng)的刷新
代碼理解

4.字符流寫(xiě)數(shù)據(jù)的方法


5.字符流讀數(shù)據(jù)的方法


字節(jié)流與字符流的讀數(shù)據(jù)的思想是一樣的只不過(guò)一個(gè)是字符,一個(gè)是字節(jié)而已
6.字符流復(fù)制文件
其方法和字節(jié)流的方法一樣,只是一個(gè)是字節(jié)一個(gè)是字符而已
方法一:一個(gè)一個(gè)的字符進(jìn)行的復(fù)制
方法二:一個(gè)字符數(shù)組一個(gè)字符數(shù)組的復(fù)制
準(zhǔn)換流
OutputStreamWriter 他又一個(gè)子類(lèi)是:FileWriter
InputStreamReader 它有一個(gè)子類(lèi)是: FileReader
我們?cè)趶?fù)制文件等相關(guān)操作的時(shí)候可以用他的子類(lèi)進(jìn)行操作,書(shū)寫(xiě)更加的簡(jiǎn)單,但是,在進(jìn)行編碼問(wèn)題解決的時(shí)候還是得用轉(zhuǎn)換流才可以
7.字符緩沖流


字符緩沖流的特有功能

那么可以做什么呢?
我們可以通過(guò)其中特有的功能進(jìn)行文件的復(fù)制等
需要注意的是readline只是讀的是內(nèi)容,不讀其他的
8.字節(jié),字符流小結(jié)
(此時(shí)有個(gè)使用的問(wèn)題就是用哪兒文件的讀取就寫(xiě)哪兒,寫(xiě)在一起容易出問(wèn)題,還有就是一定要釋放資源)
字節(jié)流

字符流

關(guān)于亂碼的問(wèn)題
個(gè)人認(rèn)為出現(xiàn)亂碼是因?yàn)槿绻玫氖亲止?jié)流的話用char來(lái)強(qiáng)制轉(zhuǎn)換顯示的話就是只有其中的一部分并沒(méi)有把一個(gè)漢字的那個(gè)文字表達(dá)組如(【-1,23,36】)表達(dá)完整,但是如果用new String()來(lái)顯示的話會(huì)表達(dá)完整(可能是里面有相應(yīng)的方法,具體不清楚,知道就行了),如果用的是字符流的話就是用的默認(rèn)的編碼以及你相應(yīng)要求的編碼來(lái)表達(dá),所以就不會(huì)出現(xiàn)亂碼的問(wèn)題了
9.復(fù)制文件的異常處理


四、特殊操作流
1.標(biāo)準(zhǔn)輸入流


2.標(biāo)準(zhǔn)輸出流


3.打印流
字節(jié)打印流


字符打印流


4.對(duì)象序列化流與對(duì)象反序列化流(它是基于字節(jié)流上的)
對(duì)象序列化流


對(duì)象反序列化流


5.解決對(duì)象序列化流的三個(gè)問(wèn)題


6.Properties

代碼理解(properties作為map集合的使用)

properties作為集合特有的方法

第一個(gè)是寫(xiě)數(shù)據(jù)進(jìn)入集合
第二個(gè)是根據(jù)鍵得到值
第三個(gè)是得到鍵得集合

Properties和IO流結(jié)合的方法
集合數(shù)據(jù)寫(xiě)到文件

文件寫(xiě)到集合

總結(jié)
IO流其實(shí)很簡(jiǎn)單,重點(diǎn)是要掌握其中的字節(jié)流讀寫(xiě)方法,以及字符流的讀寫(xiě)方法和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-01
spring?boot自動(dòng)裝配之@ComponentScan注解用法詳解
@ComponentScan的作用就是根據(jù)定義的掃描路徑,把符合掃描規(guī)則的類(lèi)裝配到spring容器中,下面這篇文章主要給大家介紹了關(guān)于spring?boot自動(dòng)裝配之@ComponentScan注解用法的相關(guān)資料,需要的朋友可以參考下2023-04-04
Java編程Socket實(shí)現(xiàn)多個(gè)客戶(hù)端連接同一個(gè)服務(wù)端代碼
這篇文章主要介紹了Java編程Socket實(shí)現(xiàn)多個(gè)客戶(hù)端連接同一個(gè)服務(wù)端代碼,具有一定參考價(jià)值,需要的朋友可以了解下。2017-11-11
Java中5種方式實(shí)現(xiàn)String反轉(zhuǎn)
下面小編就為大家?guī)?lái)一篇Java中5種方式實(shí)現(xiàn)String反轉(zhuǎn)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。2016-06-06
Springboot?前后端分離項(xiàng)目使用?POI?生成并導(dǎo)出?Excel的操作方法
在做一個(gè)?SpringBoot?前后端分離項(xiàng)目的時(shí)候,需要將數(shù)據(jù)存到?Excel中,用戶(hù)可以下載?Excel,具體實(shí)現(xiàn)是采用?Apache?強(qiáng)大的?POI,本文給大家介紹Springboot?前后端分離項(xiàng)目使用?POI?生成并導(dǎo)出?Excel相關(guān)知識(shí),感興趣的朋友一起看看吧2023-09-09
JFreeChart插件實(shí)現(xiàn)的折線圖效果實(shí)例
這篇文章主要介紹了JFreeChart插件實(shí)現(xiàn)的折線圖效果,結(jié)合實(shí)例形式分析了基于JFreeChart繪制折線圖的相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2016-08-08

