java之IO流(字元流)
一.字元編碼表
編碼表:字元和計算機二進位制的對應關係表。
ascii: 一個位元組中的7位就可以表示。對應的位元組都是正數。0-xxxxxxx
iso-8859-1:拉丁碼錶 latin,用了一個位元組用的8位。1-xxxxxxx 負數。
GB2312:簡體中文碼錶。包含6000-7000中文和符號。用兩個位元組表示。兩個位元組第一個位元組是負數,第二個位元組可能是正數
GBK:目前最常用的中文碼錶,2萬的中文和符號。用兩個位元組表示,其中的一部分文字,第一個位元組開頭是1,第二位元組開頭是0
GB18030:最新的中文碼錶,目前還沒有正式使用。
unicode:國際標準碼錶:無論是什麼文字,都用兩個位元組儲存。
二.字元輸入流Reader
read():讀取單個字元並返回
read(char[]):將資料讀取到陣列中,並返回讀取的個數。
1.FileReader類
FileReader(File file):在給定從中讀取資料的File的情況下建立一個新FileReader
FileReader(String fileName):在給定從中讀取資料的檔名的情況下建立一個新FileReader
2.FileReader讀取包含中文的檔案
public class CharStreamDemo { public staticvoid main(String[] args) throws IOException { //給檔案中寫中文 writeCNText(); //讀取檔案中的中文 readCNText(); } //讀取中文 public static void readCNText() throws IOException { FileReader fr = new FileReader("D:\\test\\cn.txt"); int ch = 0; while((ch = fr.read())!=-1){//輸出的字元對應的編碼值 System.out.println(ch); //輸出字元本身 System.out.println((char)ch); } } //寫中文 public static void writeCNText() throws IOException { FileOutputStream fos = new FileOutputStream("D:\\test\\cn.txt"); fos.write("歡迎你".getBytes()); fos.close(); } }
三.字元輸出流Writer
write(char[] cbuf):寫入字元陣列
write(char[] cbuf,int off,int len):寫入字元陣列的某一部分
write(int c):寫入單個字元
write(String str):寫入字串
write(String str,int off,int len):寫入字串的某一部分
1.FileWriter類
FileWriter(File file):根據給定的File物件構造一個FileWriter物件
FileWriter(File file,boolean append):根據給定的File物件構造一個FileWriter物件
FileWriter(String fileName):根據給定檔名構造一個FileWriter物件
FileWriter(String fileName,boolean append):根據給定的檔名以及指示是否附加寫入資料的boolean值來構造FileWriter物件
2.FileWriter寫入中文到檔案中
public class FileWriterDemo { public static void main(String[] args) throws IOException { FileWriter fw = new FileWriter("d:\\text\\fw.txt"); fw.write("你好java"); fw.flush(); fw.close(); } }
四.flush()和close()的區別
flush():將流中的緩衝區緩衝的資料重新整理到目的地中,重新整理後,流還可以繼續使用。
close():關閉資源,但在關閉前會將緩衝區中的資料先重新整理到目的地,否則丟失資料,然後在關閉流。流不可以使用。如果寫入資料多,一定要一邊寫一邊重新整理,最後一次可以不重新整理,由close完成重新整理並關閉。
五.複製文字檔案
public class CopyTextFileTest { public static void main(String[] args) throws IOException { copyTextFile(); } public static void copyTextFile() throws IOException { //明確源和目的 FileReader fr = new FileReader("D:\\java0929.txt"); FileWriter fw = new FileWriter("F:\\java0929.txt"); //字元陣列 char[] buf = new char[1024]; int len = 0; while((len=fr.read(buf))!=-1){ fw.write(buf,0,len); } //關閉資源 fw.close(); fr.close(); } }