【Java】第三十九節 IO流之轉換流

轉換流:

轉換流提供了在字節流和字符流之間的轉換,用於將字節流的讀入轉換爲字符流的讀入,將字符流的寫出轉換爲字節流的寫出,包括InputStreamReader和OutputStreamWriter,其中:

  • InputStreamReader:將InputStream轉換爲Reader,它有兩類構造方法:
    • public InputStreamReader(InputStream in) :使用系統默認字符集
    • public InputSreamReader(InputStream in,String charsetName):指定字符集
  • OutputStreamWriter:將Writer轉換爲OutputStream,它也有兩類構造方法:
    • public OutputStreamWriter(OutputStream out) :使用系統默認字符集
    • public OutputStreamWriter(OutputStream out,String charsetName):指定字符集
      在這裏插入圖片描述

例:將“Hello.txt”文件在控制檯打印出來,並將其以gbk編碼格式存入“Hello-gbk.txt”文件中

package cn.jingpengchong.io;

import java.io.*;

public class Test {
    public static void main(String[] args) {
        String src = "Hello.txt";
        String des = "Hello-gbk.txt";
        test(src,des);
    }
    private static void test(String src, String des) {
        //第二個參數爲指定的字符集,如果省略了則使用系統默認的字符集,具體使用何種字符集取決於保存文件時使用的字符集
        InputStreamReader reader= null;
        OutputStreamWriter writer = null;
        try {
            reader = new InputStreamReader(new FileInputStream(src),"utf-8");
            writer = new OutputStreamWriter(new FileOutputStream(des), "gbk");
            char[] data = new char[10];
            int read = reader.read(data);
            while (read != -1){
                String str = new String(data,0,read);
                System.out.print(str);
                writer.write(data,0,read);
                read = reader.read(data);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if(reader != null){
                try {
                    reader.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if(writer != null){
                try {
                    writer.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

運行結果如下:
在這裏插入圖片描述
此時如果以UTF-8格式打開“Hello-gbk.txt”文件,則會出現亂碼:
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章