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();
    }
}

  

 

posted @   唯易人生  阅读(156)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示