【JAVA入门】Day42 - 转换流

【JAVA入门】Day42 - 转换流


文章目录

  • [【JAVA入门】Day42 - 转换流](#【JAVA入门】Day42 - 转换流)

转换流是字符流和字节流之间的桥梁。

转换流中的输入流叫做 InputStreamReader,它可以把字节流转换为字符流。

转换流的输出流叫做 OutputStreamWriter,它可以把字符流转换成字节流。

【使用例1】把一个 GBK 的文件中的中文读取到内存中,不能出现乱码。(作用1:按照指定的字符集读取数据)

java 复制代码
package ConvertStream;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;

public class ConvertStreamDemo1 {
    public static void main(String[] args) throws IOException {
        /*
            利用转换流按照指定字符编码读取数据
            D:\IdeaProjects\HelloWord\src\ConvertStream\GBKFile.txt
         */

        //1.创建转换流对象
        //两个参数,第一个是要转换的字节输入流,第二个是编码类型
        InputStreamReader isr = new InputStreamReader(new FileInputStream("D:\\IdeaProjects\\HelloWord\\src\\ConvertStream\\GBKFile.txt"), "GBK");

        //2.读取数据
        //转换流本身就是一个字符流,可以直接用字符流的方法
        int ch;
        while((ch = isr.read()) != -1){
            System.out.print((char)ch);
        }

        //3.释放资源
        isr.close();
    }
}

在 JDK11 以后,这种转码方式被替代了,替代它的是 FileReader() 构造新的参数------ Charset charset 。

java 复制代码
package ConvertStream;

import java.io.FileInputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.nio.charset.Charset;

public class ConvertStreamDemo1 {
    public static void main(String[] args) throws IOException {
        /*
            利用转换流按照指定字符编码读取数据
            D:\IdeaProjects\HelloWord\src\ConvertStream\GBKFile.txt
         */

       /* //1.创建转换流对象
        //两个参数,第一个是要转换的字节输入流,第二个是编码类型
        InputStreamReader isr = new InputStreamReader(new FileInputStream("D:\\IdeaProjects\\HelloWord\\src\\ConvertStream\\GBKFile.txt"), "GBK");

        //2.读取数据
        //转换流本身就是一个字符流,可以直接用字符流的方法
        int ch;
        while((ch = isr.read()) != -1){
            System.out.print((char)ch);
        }

        //3.释放资源
        isr.close();*/

        //1.创建字符输入流对象
        //注意这里的编码是一个类,叫Charset类
        FileReader fr = new FileReader("D:\\IdeaProjects\\HelloWord\\src\\ConvertStream\\GBKFile.txt", Charset.forName("GBK"));

        //2.读取数据
        int ch;
        while((ch = fr.read()) != -1){
            System.out.print((char)ch);
        }

        //3.释放资源
        fr.close();
    }
}

【使用例2】利用转换流按照指定的字符编码写出数据。

java 复制代码
package ConvertStream;

import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.nio.charset.Charset;

public class ConvertStreamDemo2 {
    public static void main(String[] args) throws IOException {
        /*
            利用转换流按照指定字符编码写出数据
            D:\IdeaProjects\HelloWord\src\ConvertStream\GBKFile.txt
         */

/*        //1.创建转换输出流对象
        OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("D:\\IdeaProjects\\HelloWord\\src\\ConvertStream\\GBKFile.txt"), "GBK");

        //2.写出数据
        osw.write("你好你好你好你好!!");

        //3.释放资源
        osw.close();*/

        //1.创建字符流对象
        FileWriter fw = new FileWriter("D:\\IdeaProjects\\HelloWord\\src\\ConvertStream\\GBKFile.txt", Charset.forName("GBK"));

        //2.写出数据
        fw.write("你好你好你好你好!!");

        //3.释放数据
        fw.close();
    }
}

【使用例3】将本地文件中的 GBK 文件,转码成 UTF-8。

java 复制代码
package ConvertStream;

import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.nio.charset.Charset;

public class ConvertStreamDemo3 {
    public static void main(String[] args) throws IOException {
        /*
            将 GBK 文档转换为 UTF-8 文件
         */

        //1.创建输入输出流
        FileReader fr = new FileReader("D:\\IdeaProjects\\HelloWord\\src\\ConvertStream\\GBKFile.txt", Charset.forName("GBK"));
        FileWriter fw = new FileWriter("D:\\IdeaProjects\\HelloWord\\src\\ConvertStream\\UTF8File.txt", Charset.forName("UTF-8"));

        //2.逐字符写数据
        int b;
        while((b = fr.read()) != -1){
            fw.write(b);
        }

        //3.关闭数据流
        fw.close();
        fr.close();
    }
}
相关推荐
等一场春雨7 分钟前
Java设计模式 八 适配器模式 (Adapter Pattern)
java·设计模式·适配器模式
大数据魔法师10 分钟前
1905电影网中国地区电影数据分析(一) - 数据采集、清洗与存储
爬虫·python
肖田变强不变秃25 分钟前
C++实现有限元计算 矩阵装配Assembly类
开发语言·c++·矩阵·有限元·ansys
一弓虽29 分钟前
java基础学习——jdbc基础知识详细介绍
java·学习·jdbc·连接池
王磊鑫29 分钟前
Java入门笔记(1)
java·开发语言·笔记
喜欢猪猪37 分钟前
分布式与微服务:构建现代应用的关键架构
开发语言·php
硬件人某某某1 小时前
Java基于SSM框架的社区团购系统小程序设计与实现(附源码,文档,部署)
java·开发语言·社区团购小程序·团购小程序·java社区团购小程序
程序员徐师兄1 小时前
Java 基于 SpringBoot 的校园外卖点餐平台微信小程序(附源码,部署,文档)
java·spring boot·微信小程序·校园外卖点餐·外卖点餐小程序·校园外卖点餐小程序
kucupung1 小时前
【C++基础】多线程并发场景下的同步方法
开发语言·c++
chengpei1471 小时前
chrome游览器JSON Formatter插件无效问题排查,FastJsonHttpMessageConverter导致Content-Type返回不正确
java·前端·chrome·spring boot·json