小型公眾號(hào)開(kāi)發(fā)seo網(wǎng)站推廣經(jīng)理
文章目錄
- FileReader讀入數(shù)據(jù)的基本操作
- FileReader中使用reader()
- FileWrite寫(xiě)出數(shù)據(jù)的操作
- 使用FileInputStream、FileOutputStream操作圖片
- 緩沖流(字節(jié)型)實(shí)現(xiàn)非文本文件的復(fù)制
復(fù)制文本文件也可以使用字節(jié)流,但是不要在內(nèi)存中讀出來(lái),比如不要system.out()出來(lái)
FileReader讀入數(shù)據(jù)的基本操作
IO流的操作可以歸納為4步:
- java是面向?qū)ο蟮?#xff0c;你要讀入文件,首先要有個(gè)對(duì)象來(lái)代表這個(gè)文件,所以:
File file = new File("hello.text");
- 對(duì)文件的讀寫(xiě)是針對(duì)流的操作,所以也需要一個(gè)流的實(shí)例化:
FileReader fr = new FileReader(file);
,此處因?yàn)椴僮鞯氖俏谋疚募?#xff0c;是通過(guò)字符的方式將文件內(nèi)容讀到內(nèi)存中,所以用FileReader流,之后你以別的方式操作別的內(nèi)容需要換一種流 - 對(duì)文件進(jìn)行操作:讀入/寫(xiě)出
- 關(guān)閉資源,即關(guān)閉IO流
main方法中的new File()的地址是相較于本項(xiàng)目的,相當(dāng)于他是站在本項(xiàng)目,而在測(cè)試案例中的new File()的地址是相較于本module的
優(yōu)化一下:
前面我們寫(xiě)的代碼是通過(guò)拋異常的方式來(lái)處理異常的,但是如果執(zhí)行了new FileReader(file)開(kāi)啟了IO流,然后fr.read()遇到了異常,異常就被拋了出去,導(dǎo)致這個(gè)fr.close()未執(zhí)行,IO流沒(méi)有被關(guān)閉,存在資源浪費(fèi)、內(nèi)存泄漏問(wèn)題
所以要用try…catch…finally的方式來(lái)捕獲異常,以保證不管在哪里出現(xiàn)了異常,IO流都會(huì)被關(guān)閉
FileReader中使用reader()
如果達(dá)到文件末尾,返回-1。reader(char[] cbuf):相當(dāng)于reader使用cbuf去裝文件中的內(nèi)容,如果文件中的內(nèi)容大于cbuf的長(zhǎng)度,那么能讀取cbuf個(gè)字符,否則讀入的文件內(nèi)容少于cbuf的長(zhǎng)度,而cbuf數(shù)組中會(huì)有未被覆蓋的數(shù)據(jù),這就是錯(cuò)誤寫(xiě)法的原因。舉例:假如hello.txt文件的內(nèi)容為:helloworld123,那么第一次讀取到的是hello,第二次讀取到的是world,第三次讀取到的是123ld,所以判斷每次讀入了多少個(gè)字符,要用reader(char[] cbuf)的返回值而非cbuf數(shù)組的長(zhǎng)度
FileWrite寫(xiě)出數(shù)據(jù)的操作
使用FileInputStream、FileOutputStream操作圖片
緩沖流(字節(jié)型)實(shí)現(xiàn)非文本文件的復(fù)制
緩沖流:為了提高文件的讀寫(xiě)效率,之所以能提高讀寫(xiě)效率,是因?yàn)樗麅?nèi)部提供了一個(gè)緩存區(qū),在進(jìn)行讀的時(shí)候,他會(huì)先把文件讀到buffer里面,buffer中存滿后再一次性寫(xiě)出,buffer的默認(rèn)大小是8個(gè)字節(jié)。bufferOutputStream中有個(gè)flush()方法用于刷新緩沖區(qū),即將緩存區(qū)的數(shù)據(jù)進(jìn)行讀寫(xiě),然后清空。
一般開(kāi)發(fā)都用緩沖流。
內(nèi)層流的關(guān)閉可以省略