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