Java IO流之字符流的使用詳解
一、字符流的出現(xiàn)
中文在GBK中占有兩個字節(jié),在utf-8中占有三個字節(jié)(即需要三個字節(jié)才能組成一個中文字),字節(jié)流讀取中文時由于編碼集的不同,字節(jié)流讀取中文也比較麻煩,從而出現(xiàn)了字符流
字符流也在java.io包下
二、字符輸入流Reader
①、是一個接口類
②、里面提供了一些共性的方法,供子類使用
| 方法 | 描述 |
|---|---|
| int read() | 讀取單個字符并返回 |
| int read(char[] c) | 一次性讀取多個字符,將數(shù)據(jù)放入數(shù)組 |
| void close() | 釋放資源 |
三、文件字符輸入流 FileReader
①、FileReader extends InputStreamReader extends Reader
②、構造方法
FileReader(String filename)
FileReader(File file)
參數(shù):讀取文件的數(shù)據(jù)源
作用:創(chuàng)建FileReader對象、把FileReader對象指向要讀取的文件
③、步驟
1、創(chuàng)建FileReader對象并綁定數(shù)據(jù)源
2、使用對象的read方法讀取數(shù)據(jù)
3、釋放資源
④、代碼編程(讀取單個字符)
import java.io.FileReader;
import java.io.IOException;
public class ReaderTest {
public static void main(String[] args) {
try {
// 1、創(chuàng)建FileReader對象
FileReader fr = new FileReader("E:\\JavaCode\\JavaSE\\Day8-24\\src\\a.txt");
// 2、調用read方法
int len = 0;
while ((len = fr.read())!=-1){
System.out.println((char)len);
}
// 3、釋放資源
fr.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}⑤、代碼編程(一次性讀取多個字符)
try {
// 1、創(chuàng)建FileReader對象
FileReader fr = new FileReader("E:\\JavaCode\\JavaSE\\Day8-24\\src\\a.txt");
// 2、調用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) | 寫入單個字符 |
| void write(char[] c) | 寫入字符數(shù)組 |
| abstract void write(char[] c,int off,int len) | 寫入字符數(shù)組的某一部分,off為數(shù)組的開始索引,len為寫入的字符個數(shù) |
| void write(String str) | 寫入字符串 |
| void write(String str,int off,int len) | 寫入字符串的某一部分,off為字符開始索引,len為寫的字符個數(shù) |
| void flush() | 刷新該流的緩沖 |
| void close() | 釋放資源 |
五、文件字符輸出流 FileWriter
①、FileWriter extends OutputStreamWriter extends Writer
②、構造方法
| 方法 | 介紹 |
|---|---|
| FileWriter (File file) | 根據(jù)給定的file對象構造一個FileWriter對象 |
| FileWriter (String filename) | 根據(jù)給定 的文件名構造一個FileWriter對象 |
參數(shù):寫入數(shù)據(jù)的目的地
③、使用步驟
1、創(chuàng)建FileWriter對象,構造方法中綁定要寫入數(shù)據(jù)的目的地
2、使用FileWriter中的方法write,把數(shù)據(jù)寫入到內(nèi)存緩沖區(qū)中(字符轉換為字節(jié)的過程)
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)建對象
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()釋放資源后不能夠再使用流進行相關的操作
flush()刷新后還能夠再操作
七、換行和續(xù)寫
與字節(jié)流中的換行和續(xù)寫一致
續(xù)寫:
在使用構造函數(shù)的時候傳入兩個參數(shù),第一個參數(shù)是文件的路徑,第二個參數(shù)是是否續(xù)寫(為true表示續(xù)寫false則表示不續(xù)寫直接覆蓋)
換行:
在Windows系統(tǒng)中換行符號為 \r\n
在linux系統(tǒng)中換行符號為 /n
在Mac系統(tǒng)中換行符號為 /r
八、使用try-catch-finally處理流異常
try{
可能會產(chǎn)出異常的代碼
}catch(異常類變量 變量名){
異常的處理邏輯
}finally{
一定會執(zhí)行的代碼
資源釋放
}
今天只進行簡單的介紹,后續(xù)會專門出一期jdk7和jdk9中處理流異常的對比
到此這篇關于Java IO流之字符流的使用詳解的文章就介紹到這了,更多相關Java字符流內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
mybatis的association傳遞參數(shù)問題示例
這篇文章主要介紹了mybatis的association傳遞參數(shù)問題,本文通過示例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-12-12
解決idea?中?SpringBoot?點擊運行沒反應按鈕成灰色的問題
在使用 Spring Boot 開發(fā)項目時,可能會遇到一個問題:點擊運行按鈕后,控制臺沒有任何輸出,項目界面也沒有顯示,這種情況可能是由多種原因導致的,本文將介紹一些常見的解決方法,需要的朋友可以參考下2023-08-08
Java?中?hashCode()?與?equals()?的關系(面試)
這篇文章主要介紹了Java中hashCode()與equals()的關系,ava中hashCode()和equals()的關系是面試中的常考點,文章對hashCode與equals的關系做出詳解,需要的小伙伴可以參考一下2022-09-09

