• java中的IO流之转换流(编码转换)


    前言必读

    读者手册(必读)_云边的快乐猫的博客-CSDN博客

    一、知识点介绍

    1.为什么要学转换流?

    答:因为在不同的文件读取中,可能因为编码的不兼容读取会出现乱码的问题。比如本身的idea是UTF-8的,要去读取一个系统的GBK文件,就会出现乱码问题。那么用转换流就可以解决这个问题。

    2.怎么解决?

    答:文件---原始字节流---字符流(编码转换--读写的文件编码是格式就转换成什么格式)---缓冲流(和缓冲流后续步骤一样)。

    为什么要先转换成原始字节流

    答:因为数据的底层都是原始字节流,这样就可以获取原始字节数据,不会产生乱码的问题。

    3.具体实现?

    答:创建读写文件地址后,下一步就进行编码转换。接着加入缓冲流步骤。后续的和缓冲流一样。

    二.代码实现

    1.字符转换输入流(读取数据)------InputStreamReader

    需求:读取一个UTF-16LE编码的文件。读取里面的内容出来。 

    素材

    代码例子

    1. package bao;
    2. import java.io.*;
    3. public class Test {
    4. public static void main(String[] args) throws Exception {
    5. //1.创建要读取的文件对象
    6. InputStream in = new FileInputStream("D:\\诗情画意.txt");
    7. //2.把原始字节转换成字符输入流
    8. InputStreamReader isr = new InputStreamReader(in,"UTF-16LE");//转换格式(要读取的文件什么格式就输入什么格式)
    9. //3.加上字符缓冲流
    10. BufferedReader br = new BufferedReader(isr);
    11. String line;//缓冲桶
    12. while ((line=br.readLine())!=null){//读取文件数据内容
    13. System.out.println(line);//输出
    14. }
    15. br.close();//关闭流
    16. }
    17. }

    运行结果:

    问世间,情是何物,直教生死相许。love 99 

     2.字符转换输出流(写入数据)-----OutputStreamWriter

    需求:往一个文件里面写入数据,文件的编码要为UTF-16LE 。

    1. package bao;
    2. import java.io.*;
    3. public class Test {
    4. public static void main(String[] args) throws Exception {
    5. //1.创建往指定的文件里面写入数据的对象
    6. OutputStream out = new FileOutputStream("D:\\诗情画意1.txt");
    7. //2.原始字节转换成字符输出流
    8. OutputStreamWriter osw = new OutputStreamWriter(out,"UTF-16LE");//转换成和文件编码一致的编码(文件编码是什么,这里就是什么)
    9. //3.加上字符缓冲输出流
    10. BufferedWriter bw = new BufferedWriter(osw);
    11. //4.写入数据
    12. bw.write("此情可待成追忆,只是当时已惘然,xiaogou77");
    13. bw.close();//关闭流
    14. }
    15. }

    运行结果:

     注释:打开乱码证明成功了。因为指定的这个是UTF-16LE格式写入的文件。而我们打开默认用的就是UTF-8。

    旁白:转换流就是在普通流转换成缓冲流的中间加上转换方法,这个转换方法的编码和要操作的文件编码一致。其他步骤都和缓冲流一样。

  • 相关阅读:
    【Redis】压缩列表
    tDCS对阿尔茨海默病患者认知功能影响的系统综述和荟萃分析
    1009 说反话【PAT (Basic Level) Practice (中文)】
    Ajax--Ajax加强--XMLHttpRequest的基本使用
    苏州科技大学计算机考研资料汇总
    不开辟新存储空间的情况下完成链表的逆置
    数据库-多表设计
    # Windows 环境下载 Android 12源码
    【OAuth2】十二、Spring Authorization Server的配置
    Hadoop高手之路4-HDFS
  • 原文地址:https://blog.csdn.net/m0_52861000/article/details/126781192