天天看點

InputStreamReader與OutputStreamWriter使用

InputStreamReader類

轉換流

java.io.InputStreamReader

,是Reader的子類,是從位元組流到字元流的橋梁。它讀取位元組,并使用指定的字元集将其解碼為字元。它的字元集可以由名稱指定,也可以接受平台的預設字元集。

構造方法

  • InputStreamReader(InputStream in)

    : 建立一個使用預設字元集的字元流。
  • InputStreamReader(InputStream in, String charsetName)

    : 建立一個指定字元集的字元流。

構造舉例,代碼如下:

InputStreamReader isr = new InputStreamReader(new FileInputStream("in.txt"));
InputStreamReader isr2 = new InputStreamReader(new FileInputStream("in.txt") , "GBK");
           

指定編碼讀取

public class ReaderDemo2 {
    public static void main(String[] args) throws IOException {
      	// 定義檔案路徑,檔案為gbk編碼
        String FileName = "E:\\file_gbk.txt";
      	// 建立流對象,預設UTF8編碼
        InputStreamReader isr = new InputStreamReader(new FileInputStream(FileName));
      	// 建立流對象,指定GBK編碼
        InputStreamReader isr2 = new InputStreamReader(new FileInputStream(FileName) , "GBK");
		// 定義變量,儲存字元
        int read;
      	// 使用預設編碼字元流讀取,亂碼
        while ((read = isr.read()) != -1) {
            System.out.print((char)read); // ��Һ�
        }
        isr.close();
      
      	// 使用指定編碼字元流讀取,正常解析
        while ((read = isr2.read()) != -1) {
            System.out.print((char)read);// 大家好
        }
        isr2.close();
    }
}
           

OutputStreamWriter類

轉換流

java.io.OutputStreamWriter

,是Writer的子類,是從字元流到位元組流的橋梁。使用指定的字元集将字元編碼為位元組。它的字元集可以由名稱指定,也可以接受平台的預設字元集。

構造方法

  • OutputStreamWriter(OutputStream in)

    : 建立一個使用預設字元集的字元流。
  • OutputStreamWriter(OutputStream in, String charsetName)

    : 建立一個指定字元集的字元流。

構造舉例,代碼如下:

OutputStreamWriter isr = new OutputStreamWriter(new FileOutputStream("out.txt"));
OutputStreamWriter isr2 = new OutputStreamWriter(new FileOutputStream("out.txt") , "GBK");
           

指定編碼寫出

public class OutputDemo {
    public static void main(String[] args) throws IOException {
      	// 定義檔案路徑
        String FileName = "E:\\out.txt";
      	// 建立流對象,預設UTF8編碼
        OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream(FileName));
        // 寫出資料
      	osw.write("你好"); // 儲存為6個位元組
        osw.close();
      	
		// 定義檔案路徑
		String FileName2 = "E:\\out2.txt";
     	// 建立流對象,指定GBK編碼
        OutputStreamWriter osw2 = new OutputStreamWriter(new FileOutputStream(FileName2),"GBK");
        // 寫出資料
      	osw2.write("你好");// 儲存為4個位元組
        osw2.close();
    }
}
           

繼續閱讀