java io詳解四:字元輸入輸出流
阿新 • • 發佈:2019-01-08
那麼這篇部落格我們講的是位元組輸入輸出流:Reader、Writer(下圖紅色長方形框內),紅色橢圓框內是其典型實現(FileReader、FileWriter)
①、為什麼要使用字元流?
因為使用位元組流操作漢字或特殊符號語言的時候容易亂碼,因為漢字不止一個位元組,為了解決這個問題,建議使用字元流。
②、什麼情況下使用字元流?
一般可以用記事本開啟的檔案,我們可以看到內容不亂碼的。就是文字檔案,可以使用字元流。而操作二進位制檔案(比如圖片、音訊、視訊)必須使用位元組流
1、字元輸出流:FileWriter
1 2 3 |
|
用於寫入字元流的抽象類
方法摘要:
下面我們用 字元輸出流 Writer 的典型實現 FileWriter 來介紹這個類的用法:
//1、建立源 File srcFile = new File("io"+File.separator+"a.txt"); //2、建立字元輸出流物件 Writer out = new FileWriter(srcFile); //3、具體的 IO 操作 /*** * void write(int c):向外寫出一個字元 * void write(char[] buffer):向外寫出多個字元 buffer * void write(char[] buffer,int off,int len):把 buffer 陣列中從索引 off 開始到 len個長度的資料寫出去 * void write(String str):向外寫出一個字串 */ //void write(int c):向外寫出一個字元 out.write(65);//將 A 寫入 a.txt 檔案中 //void write(char[] buffer):向外寫出多個字元 buffer out.write("Aa帥鍋".toCharArray());//將 Aa帥鍋 寫入 a.txt 檔案中 //void write(char[] buffer,int off,int len) out.write("Aa帥鍋".toCharArray(),0,2);//將 Aa 寫入a.txt檔案中 //void write(String str):向外寫出一個字串 out.write("Aa帥鍋");//將 Aa帥鍋 寫入 a.txt 檔案中 //4、關閉流資源 /*** * 注意如果這裡有一個 緩衝的概念,如果寫入檔案的資料沒有達到緩衝的陣列長度,那麼資料是不會寫入到檔案中的 * 解決辦法:手動重新整理緩衝區 flush() * 或者直接呼叫 close() 方法,這個方法會預設重新整理緩衝區 */ out.flush(); out.close();
2、字元輸入流:Reader
1 2 3 |
|
用於讀取字元流的抽象類。
方法摘要:
下面我們用 字元輸入流 Reader 的典型實現 FileReader 來介紹這個類的用法:
//1、建立源 File srcFile = new File("io"+File.separator+"a.txt"); //2、建立字元輸出流物件 Reader in = new FileReader(srcFile); //3、具體的 IO 操作 /*** * int read():每次讀取一個字元,讀到最後返回 -1 * int read(char[] buffer):將字元讀進字元陣列,返回結果為讀取的字元數 * int read(char[] buffer,int off,int len):將讀取的字元儲存進字元陣列 buffer,返回結果為讀取的字元數,從索引 off 開始,長度為 len * */ //int read():每次讀取一個字元,讀到最後返回 -1 int len = -1;//定義當前讀取字元的數量 while((len = in.read())!=-1){ //列印 a.txt 檔案中所有內容 System.out.print((char)len); } //int read(char[] buffer):將字元讀進字元陣列 char[] buffer = new char[10]; //每次讀取 10 個字元 while((len=in.read(buffer))!=-1){ System.out.println(new String(buffer,0,len)); } //int read(char[] buffer,int off,int len) while((len=in.read(buffer,0,10))!=-1){ System.out.println(new String(buffer,0,len)); } //4、關閉流資源 in.close();
3、用字元流完成檔案的複製
/**
* 將 a.txt 檔案 複製到 b.txt 中
*/
//1、建立源和目標
File srcFile = new File("io"+File.separator+"a.txt");
File descFile = new File("io"+File.separator+"b.txt");
//2、建立字元輸入輸出流物件
Reader in = new FileReader(srcFile);
Writer out = new FileWriter(descFile);
//3、讀取和寫入操作
char[] buffer = new char[10];//建立一個容量為 10 的字元陣列,儲存已經讀取的資料
int len = -1;//表示已經讀取了多少個位元組,如果是 -1,表示已經讀取到檔案的末尾
while((len=in.read(buffer))!=-1){
out.write(buffer, 0, len);
}
//4、關閉流資源
out.close();
in.close();