Java IO 字元輸入輸出流
File 類的介紹:http://www.cnblogs.com/ysocean/p/6851878.html
Java IO 流的分類介紹:http://www.cnblogs.com/ysocean/p/6854098.html
Java IO 位元組輸入輸出流:http://www.cnblogs.com/ysocean/p/6854541.html
那麼這篇部落格我們講的是字元輸入輸出流:Reader、Writer(下圖紅色長方形框内),紅色橢圓框内是其典型實作,圖檔顯示錯誤(FileReader、FileWriter)
①、為什麼要使用字元流?
因為使用位元組流操作漢字或特殊符号語言的時候容易亂碼,因為漢字不止一個位元組,為了解決這個問題,建議使用字元流。
②、什麼情況下使用字元流?
一般可以用記事本打開的檔案,我們可以看到内容不亂碼的。就是文本檔案,可以使用字元流。而操作二進制檔案(比如圖檔、音頻、視訊)必須使用位元組流
1、字元輸出流:FileWriter
public abstract class Writer
extends Object
implements Appendable, Closeable, Flushable
用于寫入字元流的抽象類
方法摘要:
下面我們用 字元輸出流 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
public abstract class Reader
extends Object
implements Readable, Closeable
用于讀取字元流的抽象類。
下面我們用 字元輸入流 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();
作者:IT可樂
出處:http://www.cnblogs.com/ysocean/
資源:微信搜【IT可樂】關注我,回複 【電子書】有我特别篩選的免費電子書。
本文版權歸作者所有,歡迎轉載,但未經作者同意不能轉載,否則保留追究法律責任的權利。