package com.chunzhi.Test03ReverseStream; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStreamReader; /* java.io.InputStreamReader extends Reader InputStreamReader:是字節流通向字符流的橋梁。它使用指定的charset讀取字節並將其解碼為字符。 繼承父類的共性成員方法: int read():讀取單個字符並返回 int read(char[] cbuf):一次讀取多個字符,將字符讀入數組 void close():關閉該流並釋放與之相關聯的所有資源 構造方法: InputStreamReader(InputStreamReader in):創建一個使用默認字符集的InputStreamReader InputStreamReader(InputStreamReader in, String charsetName):創建使用指定字符集的InputStreamReader 參數: InputStream in:字符輸入流,用來讀取文件中保存的字節 String charsetName:指定的編碼表名稱且不區分大小寫,不指定則使用默認(IDEA默認UTF-8編碼) 使用步驟: 1.創建InputStreamReader對象,構造方法中傳遞輸入流和指定的編碼表名稱 2.使用InputStreamReader對象中的方法read讀取文件 3.釋放資源 注意事項: 構造方法中給你指定的編碼表名稱要和文件的編碼表相同,否則會發生亂碼 */ public class Test03InputStreamReader { public static void main(String[] args) throws IOException { read_utf_8(); read_gbk(); } private static void read_gbk() throws IOException { // 1.創建InputStreamReader對象,構造方法中傳遞輸入流和指定的編碼表名稱 InputStreamReader isr = new InputStreamReader(new FileInputStream("Day10_IO\\gbk.txt"), "gbk"); // 2.使用InputStreamReader對象中的方法read讀取文件 int len = 0; while ((len = isr.read()) != -1) { System.out.print((char)len); } // 3.釋放資源 isr.close(); } private static void read_utf_8() throws IOException { // 1.創建InputStreamReader對象,構造方法中傳遞輸入流和指定的編碼表名稱 InputStreamReader isr = new InputStreamReader(new FileInputStream("Day10_IO\\utf-8.txt"), "utf-8"); // 2.使用InputStreamReader對象中的方法read讀取文件 int len = 0; while ((len = isr.read()) != -1) { System.out.print((char)len); } // 3.釋放資源 isr.close(); } }