Java IO流之字符流的使用詳解
一、字符流的出現(xiàn)
中文在GBK中占有兩個(gè)字節(jié),在utf-8中占有三個(gè)字節(jié)(即需要三個(gè)字節(jié)才能組成一個(gè)中文字),字節(jié)流讀取中文時(shí)由于編碼集的不同,字節(jié)流讀取中文也比較麻煩,從而出現(xiàn)了字符流
字符流也在java.io包下
二、字符輸入流Reader
①、是一個(gè)接口類
②、里面提供了一些共性的方法,供子類使用
方法 | 描述 |
---|---|
int read() | 讀取單個(gè)字符并返回 |
int read(char[] c) | 一次性讀取多個(gè)字符,將數(shù)據(jù)放入數(shù)組 |
void close() | 釋放資源 |
三、文件字符輸入流 FileReader
①、FileReader extends InputStreamReader extends Reader
②、構(gòu)造方法
FileReader(String filename)
FileReader(File file)
參數(shù):讀取文件的數(shù)據(jù)源
作用:創(chuàng)建FileReader對(duì)象、把FileReader對(duì)象指向要讀取的文件
③、步驟
1、創(chuàng)建FileReader對(duì)象并綁定數(shù)據(jù)源
2、使用對(duì)象的read方法讀取數(shù)據(jù)
3、釋放資源
④、代碼編程(讀取單個(gè)字符)
import java.io.FileReader; import java.io.IOException; public class ReaderTest { public static void main(String[] args) { try { // 1、創(chuàng)建FileReader對(duì)象 FileReader fr = new FileReader("E:\\JavaCode\\JavaSE\\Day8-24\\src\\a.txt"); // 2、調(diào)用read方法 int len = 0; while ((len = fr.read())!=-1){ System.out.println((char)len); } // 3、釋放資源 fr.close(); } catch (IOException e) { e.printStackTrace(); } } }
⑤、代碼編程(一次性讀取多個(gè)字符)
try { // 1、創(chuàng)建FileReader對(duì)象 FileReader fr = new FileReader("E:\\JavaCode\\JavaSE\\Day8-24\\src\\a.txt"); // 2、調(diào)用read方法 char[] c = new char[1024]; int len = 0; while ((len = fr.read(c))!=-1){ System.out.println(new String(c,0,len)); } // 3、釋放資源 fr.close(); } catch (IOException e) { e.printStackTrace(); }
四、字符輸出流 Writer
共性的成員方法
方法 | 介紹 |
---|---|
void write(int c) | 寫入單個(gè)字符 |
void write(char[] c) | 寫入字符數(shù)組 |
abstract void write(char[] c,int off,int len) | 寫入字符數(shù)組的某一部分,off為數(shù)組的開始索引,len為寫入的字符個(gè)數(shù) |
void write(String str) | 寫入字符串 |
void write(String str,int off,int len) | 寫入字符串的某一部分,off為字符開始索引,len為寫的字符個(gè)數(shù) |
void flush() | 刷新該流的緩沖 |
void close() | 釋放資源 |
五、文件字符輸出流 FileWriter
①、FileWriter extends OutputStreamWriter extends Writer
②、構(gòu)造方法
方法 | 介紹 |
---|---|
FileWriter (File file) | 根據(jù)給定的file對(duì)象構(gòu)造一個(gè)FileWriter對(duì)象 |
FileWriter (String filename) | 根據(jù)給定 的文件名構(gòu)造一個(gè)FileWriter對(duì)象 |
參數(shù):寫入數(shù)據(jù)的目的地
③、使用步驟
1、創(chuàng)建FileWriter對(duì)象,構(gòu)造方法中綁定要寫入數(shù)據(jù)的目的地
2、使用FileWriter中的方法write,把數(shù)據(jù)寫入到內(nèi)存緩沖區(qū)中(字符轉(zhuǎn)換為字節(jié)的過(guò)程)
3、使用FileWriter中的方法flush,把內(nèi)存緩沖區(qū)中的數(shù)據(jù)刷新到文件中(必須有這一步)
4、釋放資源
④、代碼描述
import java.io.FileWriter; import java.io.IOException; public class WriterTest { public static void main(String[] args) { try { // 1、創(chuàng)建對(duì)象 FileWriter fw = new FileWriter("E:\\JavaCode\\JavaSE\\Day8-24\\src\\a.txt",true); // 2、寫入數(shù)據(jù) fw.write("好么"); // 3、刷新 fw.flush(); // 4、釋放資源 fw.close(); } catch (IOException e) { e.printStackTrace(); } } }
六、close()和flush()的區(qū)別
close()釋放資源后不能夠再使用流進(jìn)行相關(guān)的操作
flush()刷新后還能夠再操作
七、換行和續(xù)寫
與字節(jié)流中的換行和續(xù)寫一致
續(xù)寫:
在使用構(gòu)造函數(shù)的時(shí)候傳入兩個(gè)參數(shù),第一個(gè)參數(shù)是文件的路徑,第二個(gè)參數(shù)是是否續(xù)寫(為true表示續(xù)寫false則表示不續(xù)寫直接覆蓋)
換行:
在Windows系統(tǒng)中換行符號(hào)為 \r\n
在linux系統(tǒng)中換行符號(hào)為 /n
在Mac系統(tǒng)中換行符號(hào)為 /r
八、使用try-catch-finally處理流異常
try{
可能會(huì)產(chǎn)出異常的代碼
}catch(異常類變量 變量名){
異常的處理邏輯
}finally{
一定會(huì)執(zhí)行的代碼
資源釋放
}
今天只進(jìn)行簡(jiǎn)單的介紹,后續(xù)會(huì)專門出一期jdk7和jdk9中處理流異常的對(duì)比
到此這篇關(guān)于Java IO流之字符流的使用詳解的文章就介紹到這了,更多相關(guān)Java字符流內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java批量從svn導(dǎo)出多個(gè)項(xiàng)目代碼實(shí)例
這篇文章主要介紹了java批量從svn導(dǎo)出多個(gè)項(xiàng)目代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-03-03用java實(shí)現(xiàn)斗地主發(fā)牌過(guò)程
這篇文章主要為大家詳細(xì)介紹了用java實(shí)現(xiàn)斗地主發(fā)牌過(guò)程,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-11-11如何使用SpringBootCondition更自由地定義條件化配置
這篇文章主要介紹了如何使用SpringBootCondition更自由地定義條件化配置,幫助大家更好的理解和學(xué)習(xí)使用springboot框架,感興趣的朋友可以了解下2021-04-04java 實(shí)現(xiàn)圖片圓角處理、背景透明化
這篇文章主要介紹了java 實(shí)現(xiàn)圖片圓角處理、背景透明化,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-11-11IDEA-SpringBoot項(xiàng)目Debug啟動(dòng)不了(卡住不動(dòng))的原因分析
這篇文章主要介紹了IDEA-SpringBoot項(xiàng)目Debug啟動(dòng)不了(卡住不動(dòng))的原因分析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-11-11解決mybatis generator MySQL自增ID出現(xiàn)重復(fù)問(wèn)題MySQLIntegrityC
在MySQL中使用MyBatis時(shí),可能會(huì)遇到由于主鍵重復(fù)導(dǎo)致的插入失敗問(wèn)題,此問(wèn)題通常發(fā)生在連續(xù)插入多條數(shù)據(jù)時(shí),如果selectKey的order配置錯(cuò)誤,如使用BEFORE而不是AFTER,將會(huì)導(dǎo)致獲取的ID未更新,引起主鍵重復(fù)錯(cuò)誤,正確的配置應(yīng)使用AFTER2024-10-10java.lang.NullPointerException出現(xiàn)的幾種原因及解決方案
這篇文章主要介紹了java.lang.NullPointerException出現(xiàn)的幾種原因及解決方案,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-05-05SpringBoot應(yīng)用監(jiān)控帶郵件警報(bào)的實(shí)現(xiàn)示例
本文主要介紹了SpringBoot應(yīng)用監(jiān)控帶郵件警報(bào)的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-02-02JavaWeb 中Cookie實(shí)現(xiàn)記住密碼的功能示例
cookie是一種WEB服務(wù)器通過(guò)瀏覽器在訪問(wèn)者的硬盤上存儲(chǔ)信息的手段。Cookie的目的就是為用戶帶來(lái)方便,為網(wǎng)站帶來(lái)增值。這篇文章主要介紹了JavaWeb 中Cookie實(shí)現(xiàn)記住密碼的功能示例,需要的朋友可以參考下2017-06-06