io流之转换流
先知:
Java IO流中提供了两种用于将字节流转换为字符流的转换流。
其中InputStreamReader用于将字节输入流转换为字符输入流,
其中OutputStreamWriter用于将字节输出流转换为字符输出流
作用:使用转换流可以在一定程度上避免乱码,还可以指定输入输出所使用的字符集
1、OutputStreamWriter,将字节输出流转换为字符输出流。创建使用指定字符集的 OutputStreamWriter,如果不指定字符集就使用默认字符集创建OutputStreamWriter。转换之后可以不用关闭OutputStream
2、InputStreamReader,将字节输入流转换为字符输入流。创建使用指定字符集的 InputStreamReader,如果不指定字符集就使用默认字符集创建InputStreamReader。转换之后可以不用关闭InputStream
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | 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(); } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | 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(); } } |
注意点: 以上使用的不是转换流的常用形式
转换流的应用场景:字节流想要使用字符流的方法
综合小练习:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | 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(); } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | 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(); } } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix