Filewriter FileRead 只能使用默认的编码表,如果不是对应的话,读取输入都会出现乱码情况
因此使用OutputStreamWrite 字符通向字节的桥梁
InputStreamReader 字节通向字符的桥梁
下面就是其使用的示例:
OutputStreamWrite
// OutputStreamWrite extends writer // 是字符通向字节的桥梁:可使用指定 charset 将写入流中的字符编码成字节。 //charset就是字符集 也就是编码表 比如:utf-8 gbk public class Demo02OutputStreamWriter { public static void main(String[] args) throws IOException { write_utf_8(); //utf-8与gbk的演示 write_gbk(); } private static void write_gbk() throws IOException { OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("jday10_IO\\gbk.txt"), "gbk"); //不指定的话默认为utf-8 //2、使用OutputStreamWriter对象中的方法write,把字符转换为字节,存储到缓冲区中(编码) osw.write("你好"); //3、使用OutputStreamWriter对象中的方法flush,把内存缓冲区中的字节刷新到文件中(使用字节流写字节过程) osw.flush(); //4、释放资源 osw.close(); } /*使用转换流使用OutputStreamWriter写utf-8格式文件*/ private static void write_utf_8() throws IOException { //1、创建OutputStreamWriter对象,构造方法中传递字节输出流和指定的编码表名称 OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("jday10_IO\\utf-8.txt"), "utf-8");//不指定默认utf-8 //2、使用OutputStreamWriter对象中的方法write,把字符转换为字节,存储到缓冲区中(编码) osw.write("你好"); //3、使用OutputStreamWriter对象中的方法flush,把内存缓冲区中的字节刷新到文件中(使用字节流写字节过程) osw.flush(); //4、释放资源 osw.close(); } }
InputStreamReader
//InputStreamReader extends Reader //是字节流通向字符流的桥梁,它使用指定的charset 读取字节并将其解析为字符。 public class Demo01InputStreamReader { public static void main(String[] args) throws IOException { //1、创建InputStreamReader对象,构造方法中传递字节输入流和指定的编码表名称 //2、使用InputStreamReader对象中的方法reader读取文件 //3释放资源 //注意:构造方法中的编码表名称要和文件一样,否则会乱码 read_utf_8(); read_gbk(); } private static void read_gbk() throws IOException { //1、创建InputStreamReader对象,构造方法中传递字节输入流和指定的编码表名称 InputStreamReader isr = new InputStreamReader(new FileInputStream("jday10_IO\\gbk.txt"),"gbk");//默认为utf-8 //2、使用InputStreamReader对象中的方法reader读取文件 int len=0; while((len=isr.read())!=-1){ System.out.println((char) len);//强转,len为int型 改为cha类型 } //3释放资源 isr.close(); } private static void read_utf_8() throws IOException { //1、创建InputStreamReader对象,构造方法中传递字节输入流和指定的编码表名称 InputStreamReader isr = new InputStreamReader(new FileInputStream("jday10_IO\\utf-8.txt"),"utf-8");//默认为utf-8 //2、使用InputStreamReader对象中的方法reader读取文件 int len=0; while((len=isr.read())!=-1){ System.out.println((char) len);//强转,len为int型 改为cha类型,不然输出的会是数字,代表其表中对应的数字 } //3释放资源 isr.close(); } }