1. 程式人生 > 實用技巧 >處理流_轉換流(字元流)

處理流_轉換流(字元流)

處理流_轉換流(字元流)

InputStreamReader:將InputStream轉換為Reader,實現位元組的輸入流轉換為字元的輸入流

/**
 * 處理六:轉換流的使用
 * 1.轉換流:屬於字元流
 *  InputStreamReader:將一個位元組的輸入流轉換為字元的輸入流
 *  OutputStreamWriter:將一個字元的輸出流轉換為位元組的輸出流
 *
 * 2.作用:提供字元與位元組之間的轉換
 * 3.解碼:位元組、陣列 ---》 字元、字串  InputStreamReader
 *   編碼:字元、字串 ---》 位元組、陣列  OutputStreamWriter
 *
 * 4.字符集
 */
public class IOStreamReaderAndWriter {
    public static void main(String[] args) {
        InputStreamReader inputStreamReader = null;
        try {
            FileInputStream fileInputStream = new FileInputStream("基礎語法\\a.txt");
//        InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream);//使用系預設的字符集  UTF-8
            //使用utf-8  取決於原來儲存時的字符集
            inputStreamReader = new InputStreamReader(fileInputStream,"UTF-8");
            char[] cbuf = new char[20];
            int len;
            while ((len = inputStreamReader.read(cbuf)) != -1){
                String string = new String(cbuf,0,len);
                System.out.println(string);
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (inputStreamReader != null)
                inputStreamReader.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

OutputStreamWriter:將Writer轉換為OutputStream

/**
 * 處理六:轉換流的使用
 * 1.轉換流:屬於字元流
 *  InputStreamReader:將一個位元組的輸入流轉換為字元的輸入流
 *  OutputStreamWriter:將一個字元的輸出流轉換為位元組的輸出流
 *
 * 2.作用:提供字元與位元組之間的轉換
 * 3.解碼:位元組、陣列 ---》 字元、字串  InputStreamReader
 *   編碼:字元、字串 ---》 位元組、陣列  OutputStreamWriter
 *
 * 4.字符集
 * 
 */
public class IOStreamReaderAndWriter {
    public static void main(String[] args) {
        InputStreamReader inputStreamReader = null;
        OutputStreamWriter outputStreamWriter = null;
        try {
        /*
        綜合使用InputStreamReader和OutputStreamWriter  實現文字檔案字符集的轉換
         */
            //造檔案 、造流
            File file1 = new File("基礎語法\\a.txt");
            File file2 = new File("基礎語法\\gbk_a.txt");

            FileInputStream fileInputStream = new FileInputStream(file1);
            FileOutputStream fileOutputStream = new FileOutputStream(file2);

            inputStreamReader = new InputStreamReader(fileInputStream,"utf-8");
            outputStreamWriter = new OutputStreamWriter(fileOutputStream,"gbk");

            //讀寫過程
            char[] cbuf = new char[20];
            int len;
            while ((len = inputStreamReader.read(cbuf)) != -1){
                outputStreamWriter.write(cbuf,0,len);
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            //關閉資源
            try {
                if (inputStreamReader != null)
                inputStreamReader.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
            try {
                if (outputStreamWriter != null)
                outputStreamWriter.close();
            } catch (IOException e) {
                e.printStackTrace();
            }

        }
    }
}