先知:
Java IO流中提供了两种用于将字节流转换为字符流的转换流。
其中InputStreamReader用于将字节输入流转换为字符输入流,
其中OutputStreamWriter用于将字节输出流转换为字符输出流
作用:使用转换流可以在一定程度上避免乱码,还可以指定输入输出所使用的字符集
1、OutputStreamWriter,将字节输出流转换为字符输出流。创建使用指定字符集的 OutputStreamWriter,如果不指定字符集就使用默认字符集创建OutputStreamWriter。转换之后可以不用关闭OutputStream
2、InputStreamReader,将字节输入流转换为字符输入流。创建使用指定字符集的 InputStreamReader,如果不指定字符集就使用默认字符集创建InputStreamReader。转换之后可以不用关闭InputStream
package com.Lucky.io.ConvertStream; import java.io.*; import java.nio.charset.Charset; /* 转换流: inputStreamReader -->字符转换输入流 outputStreamWriter-->字符转换输出流 作用:1.指定编码格式读写数据【JDK11以后就被淘汰了】 2.字节流想用字符流的方法 */ /** * 字节转换流:读取 * * 每天一个小知识:查看文件的编码格式--》打开文件,另存为,看到ANSI就是GBK * */ public class demo1 { public static void main(String[] args) throws IOException { System.out.println("------了解即可:在JDK11的时候就被淘汰了-----------"); InputStreamReader inStrReader= new InputStreamReader(new FileInputStream("H:\\项目\\javaSE\\IO\\src\\com\\Lucky\\io\\ConvertStream\\convert.txt"),"GBK"); int val; while ((val=inStrReader.read())!=-1){ //乱码:因为该路径的文件是UFT-8编码格式的数据,而我们将编码格式改为了GBK,所以出现了乱码 System.out.print((char)val); } inStrReader.close(); System.out.println(); System.out.println("----------------要掌握的写法:-----------------------"); FileReader reader= new FileReader("H:\\项目\\javaSE\\IO\\src\\com\\Lucky\\io\\ConvertStream\\GBKdata.txt",Charset.forName("GBK")); int gbk; while ((gbk=reader.read())!=-1){ System.out.print((char)gbk); } reader.close(); } }
package com.Lucky.io.ConvertStream; import java.io.*; import java.nio.charset.Charset; /** * 字节转换流:写出 */ public class demo2 { public static void main(String[] args) throws IOException { System.out.println("------了解即可:在JDK11的时候就被淘汰了-----------"); OutputStreamWriter inStrWriter= new OutputStreamWriter(new FileOutputStream( "H:\\项目\\javaSE\\IO\\src\\com\\Lucky\\io\\ConvertStream\\convert.txt"), "UTF-8"); inStrWriter.write("你好!唯易"); inStrWriter.close(); System.out.println(); System.out.println("----------------要掌握的写法:-----------------------"); FileWriter write= new FileWriter( "H:\\项目\\javaSE\\IO\\src\\com\\Lucky\\io\\ConvertStream\\GBKdata.txt", Charset.forName("GBK")); write.write("你好!唯易"); write.close(); } }
注意点: 以上使用的不是转换流的常用形式
转换流的应用场景:字节流想要使用字符流的方法
综合小练习:
package com.Lucky.io.ConvertStream; /* 利用字节流读取纯文本文件,还要一次读取一行【不能出现乱码】 */ import java.io.*; /** * 分析: ①用字节流读取纯文本文件会出现乱码②一次要读取一行【满足要求的只有字符缓冲流】 * ③乱码情况要考虑④结合条件知道要使用--》字节流/字符缓冲流/字符转换流 */ public class byteStreamfindFile { public static void main(String[] args) throws IOException { System.out.println("---------初级写法----------"); //字节输入流 InputStream inputStream= new FileInputStream("H:\\项目\\javaSE\\IO\\src\\com\\Lucky\\io\\ConvertStream\\convert.txt"); //字符转换输入流 InputStreamReader inReader=new InputStreamReader(inputStream); //字符缓冲流 BufferedReader bufReader=new BufferedReader(inReader); String str; while ((str=bufReader.readLine())!=null){ System.out.println(str); } bufReader.close(); } }
package com.Lucky.io.ConvertStream; import java.io.*; import java.nio.charset.Charset; /* 将内容为UTF-8编码格式文件转换--》GBK编码格式文件 */ public class convertData { public static void main(String[] args) throws IOException { System.out.println("------了解即可:在JDK11的时候就被淘汰了-----------"); // InputStreamReader inReader= // new InputStreamReader(new FileInputStream("H:\\项目\\javaSE\\IO\\src\\com\\Lucky\\io\\ConvertStream\\convert.txt"),"UTF-8"); // OutputStreamWriter outWriter= // new OutputStreamWriter(new FileOutputStream("H:\\项目\\javaSE\\IO\\src\\com\\Lucky\\io\\ConvertStream\\gbkConvert.txt"),"GBK"); // // int val; // while ((val=inReader.read())!=-1){ // outWriter.write(val); // } // outWriter.close(); // inReader.close(); System.out.println("----------------要掌握的写法:-----------------------"); FileReader Freader=new FileReader("H:\\项目\\javaSE\\IO\\src\\com\\Lucky\\io\\ConvertStream\\convert.txt", Charset.forName("UTF-8")); FileWriter Fwriter=new FileWriter("H:\\项目\\javaSE\\IO\\src\\com\\Lucky\\io\\ConvertStream\\gbkConvert.txt", Charset.forName("GBK")); int str; while ((str=Freader.read())!=-1){ Fwriter.write(str); } Fwriter.close(); Freader.close(); } }
标签:转换,ConvertStream,流之,Lucky,System,io,new,com From: https://www.cnblogs.com/Lucky-only/p/16970854.html