当前位置: 首页 > news >正文

JAVA学习小记之IO流04--转换流篇

转换流:

按照A规则存储,同样按照A规则解析,那么就能显示正确的文本符号。反之,按照A规则存储,再按照B规则解析,就会导致乱码现象。

转换的原因是: 有的文件并非是按UTF-8编码,那么在读文件内容时可能就会乱码,此时需将字节流转为字符流(更好地读取中文),并选取恰当的编码方式,从而避免乱码~~~

字符集/编码表:

常见的比如: ASCII字符集、GBK字符集、Unicode字符集(utf-8、utf-16...)


字节流->字符流InputStreamReader:

由于IDEA的设置,都是默认的UTF-8编码。但是,当读取Windows系统中创建的文本文件时,由于Windows系统的默认是GBK编码,就会出现乱码。

构造方法:

  • InputStreamReader(InputStream in): 创建一个使用默认字符集的字符流。
  • InputStreamReader(InputStream in, String charsetName): 创建一个指定字符集的字符流。
InputStreamReader isr = new InputStreamReader(new FileInputStream("in.txt"));
InputStreamReader isr2 = new InputStreamReader(new FileInputStream("in.txt") , "GBK");

案例:

 新建文本,名字为note,路径为D:\\code\\JavaDemo\\note.txt,内容为:

末日来临,后端居然成了最后的救世主...
全球丧尸爆发,唯一解药:后端开发学习经验!
没错,你没看错!
科学家们发现,丧尸病毒对计算机专业的人完全无效,尤其是那些学过后端开发的人,体内竟然自带抗体!
至此,我带着我的联想电脑和黑马教程杀出一条属于我们的血路!

package com.logindemo.IO;

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.InputStreamReader;

// 字节流->字符流
public class transform01 {
    public static void main(String[] args) throws Exception {
        String path="D:\\code\\JavaDemo\\note.txt";
        //将FileInputStream转为InputStreamReader,实现将字节流转换为字符流
        //因为其第一个参数要求是InputStream类及其子类,所以该位置参数只能是字节流
        //设置编码方式
        InputStreamReader inputStreamReader = new InputStreamReader(new FileInputStream(path),"gbk");  // 第二个参数了决定的编码的类型,只有和文件存储时的类型一致,才能不乱码
        //交给处理流去读取数据,效率更高
        BufferedReader br = new BufferedReader(inputStreamReader);
        String line;  // 用于存储每行内容
        // 循环读取每一行,直到返回null(文件结束)
        while ((line = br.readLine()) != null) {
            System.out.println(line);
        }
        // 关闭资源
        br.close();
    }
}

 运行结果:


字符流->字节流OutputStreamWriter:

  • 该类的构造器也可以指定编码类型,用于定义文件的编码方式
  • 注意:若设置了gbk编码,但输入文件的内容中不含中文,则文件还是默认是utf-8的编码方式

构造方法: 

  • OutputStreamWriter(OutputStream in): 创建一个使用默认字符集的字符流。
  • OutputStreamWriter(OutputStream in, String charsetName): 创建一个指定字符集的字符流。
OutputStreamWriter isr = new OutputStreamWriter(new FileOutputStream("a.txt"));
OutputStreamWriter isr2 = new OutputStreamWriter(new FileOutputStream("b.txt") , "GBK");

案例:

package com.logindemo.IO;

import java.io.*;

public class transform02 {
    public static void main(String[] args) throws Exception {
        //字符流->字节流    存储到文件中
        String path="D:\\code\\JavaDemo\\note.txt";
        OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream(path), "gbk");
        osw.write("hello!你好island!!");
        osw.close();
    }
}

// 注意:若设置了gbk编码,但输入文件的内容中不含中文,则文件还是默认是utf-8的编码方式

运行结果:

http://www.dtcms.com/a/109950.html

相关文章:

  • EasyExcel 数据字典转换器实战:注解驱动设计
  • Django4.0的快速查询以及分页
  • Flink SQL-Client Kafka connector
  • Uni-app 项目 PDF 批注插件库在线版 API 示例教程
  • Ceph异地数据同步之-RBD异地同步复制(上)
  • 每日一题(小白)ASCLL娱乐篇5
  • ARM架构+CODESYS:解锁嵌入式边缘计算的实时控制新范式
  • MIT6.828 Lab3-2 Print a page table (easy)
  • 大数据学习(98)-数据治理
  • 预测分析(二):基于机器学习的数值预测
  • 【大模型基础_毛玉仁】6.3 知识检索
  • API接口调用
  • 通信算法之256: 无人机Remote ID(远程识别)
  • adc推荐,单通道,双极性采集
  • 最近常用 python 记录
  • 环境数据综合分析系统
  • 贤小二c#版Yolov5 yolov8 yolov10 yolov11自动标注工具 + 免python环境 GPU一键训练包
  • 贴片加工SMT厂核心工艺解析
  • 码界奇缘 Java 觉醒 第二章 变量迷城
  • 计算机网络-TCP的重传机制
  • 清晰易懂的 Flutter 开发环境搭建教程
  • java短连接,长连接
  • Linux命令-uniq
  • RAGFlow部署与使用介绍-深度文档理解和检索增强生成
  • 本地部署 Firecrawl 爬虫让 AI 知识库更丰满
  • Java创建对象和spring创建对象的过程和区别
  • AI赋能数据库管理“最后一公里”,融合架构重塑数据库承载成本效能——zCloud 6.7与zData X 3.3正式发布
  • MonkeyDev 如何创建一个root级级别的app,并执行root命令获取iphone设备序列号serialNumber(ios15.8)
  • 航电系统之承重与避障技术
  • “二分查找 + (必要时)前缀和” -- 处理 ’有序数组‘ 的区间问题汇总