1. 程式人生 > >java之IO流(字元流)

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 static
void 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();
    }
}