说明
InputStreamReader
是从字节流到字符流的桥梁:读取字节,并使用指定的 charset
将其 解码为字符 。
如果不指定字符集,用平台的默认字符集。操作系统默认字符集:
- windows10、linux、macos,默认字符集是
UTF-8
- windows8以前,默认字符集是
GBK
构造方法
创建一个使用默认字符集的InputStreamReader:
InputStreamReader(InputStream in)
创建一个使用给定字符集的InputStreamReader:
InputStreamReader(InputStream in, Charset cs)
创建一个使用命名字符集的InputStreamReader:
InputStreamReader(InputStream in, String charsetName)
易发生错误
调用 read()
方法,可能会发生转换失败
如:读取 含有中文内容的文件,该文件是 UTF-8
编码,也就是说需要 2-3
个字节 才能 转换 成 中文,当 读取1个字节,就开始转换时,就会导致 转换失败
解决
为了使字节有效地转换为字符,可以用 BufferedReader
缓冲流:
String file = "D:\\java\\util\\src\\main\\java\\top\\malaoshi\\util\\MapUtil.java";
FileInputStream fis = new FileInputStream(file);;
InputStreamReader isr = new InputStreamReader(fis,"utf-8");
BufferedReader br = new BufferedReader(isr);
然后用 BufferedReader
的 readLine()
方法读取一行
例子
String file = "D:\\java\\util\\src\\main\\java\\top\\malaoshi\\util\\MapUtil.java";
FileInputStream fis = new FileInputStream(file);;
InputStreamReader isr = new InputStreamReader(fis,"utf-8");
BufferedReader br = new BufferedReader(isr);
String line=null;
while( (line = br.readLine()) != null){
System.out.println(line);
}
//先打开的后关闭
br.close();
isr.close();
fis.close();