1. 程式人生 > 實用技巧 >字元流讀中文和位元組流

字元流讀中文和位元組流

package Reader;

import java.io.FileInputStream;
import java.io.IOException;

/*
使用位元組流讀取中文檔案
1箇中文
GBK:佔用兩個位元組
UTF-8:佔用3個位元組
*/
public class Demo01InputStream {
public static void main(String[] args) throws IOException {
FileInputStream fis = new FileInputStream("09_IOAndProperties\c.txt");//你好
int len = 0;
while((len = fis.read())!=-1){
System.out.println((char)len);//讀中文亂碼一次讀1/3個字元
}
fis.close();
}
}

package com.itheima.Demo04.Reader;

import java.io.FileReader;
import java.io.IOException;

/*
java.io.Reader:字元輸入流,是字元輸入流的最頂層的父類,定義了一些共性的成員方法,是一個抽象類

共性的成員方法:
    int read() 讀取單個字元並返回。
    int read(char[] cbuf)一次讀取多個字元,將字元讀入陣列。
    void close() 關閉該流並釋放與之關聯的所有資源。

java.io.FileReader extends InputStreamReader extends Reader
FileReader:檔案字元輸入流
作用:把硬碟檔案中的資料以字元的方式讀取到記憶體中

構造方法:
    FileReader(String fileName)
    FileReader(File file)
    引數:讀取檔案的資料來源
        String fileName:檔案的路徑
        File file:一個檔案
    FileReader構造方法的作用:
        1.建立一個FileReader物件
        2.會把FileReader物件指向要讀取的檔案
字元輸入流的使用步驟:
    1.建立FileReader物件,構造方法中繫結要讀取的資料來源
    2.使用FileReader物件中的方法read讀取檔案
    3.釋放資源

/
public class Demo02Reader {
public static void main(String[] args) throws IOException {
//1.建立FileReader物件,構造方法中繫結要讀取的資料來源
FileReader fr = new FileReader("09_IOAndProperties\c.txt");
//2.使用FileReader物件中的方法read讀取檔案
//int read() 讀取單個字元並返回。
/
int len = 0;
while((len = fr.read())!=-1){
System.out.print((char)len);
}*/

    //int read(char[] cbuf)一次讀取多個字元,將字元讀入陣列。
    char[] cs = new char[1024];//儲存讀取到的多個字元
    int len = 0;//記錄的是每次讀取的有效字元個數
    while((len = fr.read(cs))!=-1){
        /*
            String類的構造方法
            String(char[] value) 把字元陣列轉換為字串
            String(char[] value, int offset, int count) 把字元陣列的一部分轉換為字串 offset陣列的開始索引 count轉換的個數
         */
        System.out.println(new String(cs,0,len));
    }

    //3.釋放資源
    fr.close();
}

}