生活随笔
收集整理的這篇文章主要介紹了
IO流总述
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
IO流分類
1)按照流向分類:
輸入流:讀取數據用的
輸出流:寫數據用的
2)按照讀寫的數據分類(體系結構)
<1>字節流[讀寫任何類型的文件(任何文件底層都是字節數據)]
字節輸入流:IntputStream(抽象類)
–FileInuptStream: 讀取文件中的字節
–BufferedInputStream: 對InputStream進行包裝,提高讀取數據的效率
字節輸出流: OutputStream(抽象類)
–FileOutputSteam: 往文件中寫字節
–BufferedOutputStream: 對OutputStream進行包裝,提高寫入數據的效率
1)普通字節流復制
FileInputStream fis
= new FileInputStream("文件路徑");FileOutputStream fos
= new FileOutputStream("文件路徑");byte[] bs
= new byte[1024]; int len
; while((len
=fis
.read(bs
))){fos
.write(bs
,0,len
);}fis
.close();fos
.close();2)緩沖字節流復制
BufferedInputStream bis
= new BufferedInputStream(new FileInputStream("文件路徑"));BufferedOutputStream bos
= new BufferedOutputStream(new FileOutputStream("文件路徑"));byte[] bs
= new byte[1024]; int len
; while((len
=bis
.read(bs
))!=-1){bos
.write(bs
,0,len
);}bis
.close();bos
.close();
<2>字符流[只能讀取文本文件(用記事本打開能讀懂的就是文本文件)]
字符輸入流:Reader(抽象類)
–FileReader: 讀取文件中的字符數據
–BufferedReader: 對FileReader進行包裝,提高讀取字符的效率
字節輸出流: Writer(抽象類)
–FileWriter: 往文件中寫字符數據
–BufferedWriter: 對FileWriter進行包裝,提高寫入字符的效率
1)普通字符流復制
FileReader fr
= new FileReader("文件路徑");FileWriter fw
= new FileWriter("文件路徑");char[] bs
= new char[1024]; int len
; while((len
=fr
.read(bs
))!=-1){fw
.write(bs
,0,len
);}fr
.close();fw
.close();2)字符緩沖流復制
BuferedReader br
= new BufferedReader(new FileReader("文件路徑"));BuferedWriter bw
= new BuferedWriter(new FileWriter("文件路徑"));String line
; while((line
=br
.readLine())!=null){bw
.write(line
);bw
.newLine(); bw
.flush
; }br
.close();bw
.close();
3)字節流以及字符流的注意事項:
<1>為什么字節流讀取文本文件,可能會出現亂碼?
字節流一次讀一個字節,而不管GBK還是UTF-8一個中文都是多個字節,用字節流每次只能讀其中的一部分,所以就會出現亂碼問題。
<2>字符流怎么解決亂碼問題
通過字符串的getBytes(“碼表名”) 和 new String(byte1, “碼表名”)進行編碼和解碼
<3>字符流寫數據
a.創建字符輸出流對象:如果文件不存在,就新建,但是要保證父級路徑的存在
如果文件存在就清空
b.寫數據:寫出int類型的整數,實際寫出的是整數在碼表上對應的字母
寫出字符串數據,是把字符串本身原樣寫出。
<4>字符流底層為【字節流+編碼表】
總結
以上是生活随笔為你收集整理的IO流总述的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。