一起来学习Java IO的转化流

作者:WYSCODER 时间:2023-11-26 20:38:30 

Java IO 转化流

乱码引起转换流

读取乱码

读取电脑磁盘上的Java.txt文件内容,文件路径: e:\Java\Java.txt,文件编码格式为 utf-8 。

一起来学习Java IO的转化流

代码示例:

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
public class TestDemo {
   public static void main(String[] args) {
       BufferedReader bufferedReader = null;
       String filePath = "e:\\Java\\Java.txt";
       try {
           bufferedReader = new BufferedReader(new FileReader(filePath));//创建字符处理流对象
            String s = bufferedReader.readLine();//读取文件
            System.out.println(s);
       } catch (FileNotFoundException e) {
           e.printStackTrace();
       } catch (IOException e) {
           e.printStackTrace();
       } finally {//关闭处理流
           try {
               if (bufferedReader != null) {
                   bufferedReader.close();
               }
           } catch (IOException e) {
               e.printStackTrace();
           }
       }
   }
}

运行结果:将文件内容读取了出来。

一起来学习Java IO的转化流

因为程序默认是以 utf-8 编码读取的,而此时Java.txt文件恰好是 utf-8 编码,所以可以将内容完整的读取出来。如果改变Java.txt文件的编码格式,读取结果会怎样呢?

修改Java.txt 文件的编码格式为gbk,ANSI为国标码,根据电脑系统识别,当前电脑系统为gbk编码,所以将文件编码修改为ANSI编码即可。

一起来学习Java IO的转化流

再次读取文件结果出现乱码

因为程序默认以utf8编码格式读取文件,而此时文件编码为gbk,所以读取结果会产生乱码。

一起来学习Java IO的转化流

如何解决这个问题?我们可以使用 转换流 来指定输入流的编码格式

转换流介绍

转换流有 InputStreamReader 和 OutputStreamWriter两种。

1. InputStreamReader:Reader的子类,可以将InputStream(字节流)转换为Reader(字符流)

2. OutputStreamWriter:Writer的子类,可以将OutputStream(字节流)转换为Writer (字符流)

3. 当处理纯文本数据时,如果使用字符流效率更高,并且可以有效解决中文问题,建议将字节流转换成字符流。

4. 可以在使用时指定编码格式(比如utf8,gbk等)

InputStreamReader

InputStreamReader类继承关系及构造函数

一起来学习Java IO的转化流

InputStreamReaderReader的一个子类,它其中的构造函数InputStreamReader(InputStream,Charset)可以将一个字节输入流转换成字符输入流,同时通过Charset属性指定字符集编码。

用转换流InputStreamReader再次读取上述示例中Java.txt文件,解决乱码问题。

代码示例:

import java.io.*;
public class InputStreamReaderTest {
   public static void main(String[] args) throws IOException {
       String filePath = "e:\\Java\\Java.txt";
        FileInputStream fileInputStream = new FileInputStream(filePath);
       //将字节输入流,转换为字符流 并指定编码格式为 utf8
       InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream, "gbk");
        //将字符流转换为功能更加强大的字符处理流
       BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
        //读取内容
       String s = bufferedReader.readLine();
       System.out.println(s);
        //关闭流
       bufferedReader.close();
   }
}

运行结果:

内容读取成功~~~

一起来学习Java IO的转化流

OutputStreamWriter

OutputStreamWriter类继承关系及构造函数

一起来学习Java IO的转化流

OutputStreamWriterWriter的一个子类,它其中的构造函数OutputStreamWriter(OutputStream,Charset)可以将一个字节输出流转换成字符输出流,同时通过Charset属性指定字符集编码。

代码示例:

编程将字节流 FileOutputStream 转换成字符流OutputStreamWriter,并在电脑磁盘上文件hello.txt文件中指定gbk编码格式写入“你好,Java!”,文件路径: e:\Java\hello.txt 。

import java.io.*;
public class OutputSteamWriterTest {
   public static void main(String[] args) throws IOException {
       String filePath = "e:\\Java\\hello.txt";
        //将字节输出流转换为字符输出流
       OutputStreamWriter outputStreamWriter = new OutputStreamWriter(new FileOutputStream(filePath), "gbk");
        String content = "你好,Java!";
        //将内容写进文件
       outputStreamWriter.write(content);
        //关闭流
       outputStreamWriter.close();
        System.out.println("保存成功~~~");
   }
}

运行结果:

将内容写进了hello.txt文件。

一起来学习Java IO的转化流

来源:https://blog.csdn.net/sheng0113/article/details/123639706

标签:Java,IO,转化流
0
投稿

猜你喜欢

  • C#读写INI文件的方法

    2023-12-08 15:31:10
  • Android 使用Vibrator服务实现点击按钮带有震动效果

    2023-06-15 01:57:16
  • c# 调用Surfer软件,添加引用的具体操作方法

    2023-12-06 17:05:37
  • Mybatis环境搭建及文件配置过程解析

    2021-07-04 22:37:03
  • Java二维数组实战案例

    2022-08-13 08:59:25
  • Java实现简单无界面五子棋

    2022-07-10 12:06:02
  • 泛谈Java中的不可变数据结构

    2022-02-18 00:12:54
  • SpringBoot实现启动类的存放位置

    2021-12-02 21:13:21
  • java使用Socket实现SMTP协议发送邮件

    2022-06-08 19:25:50
  • java中i = i++和i =++i的深入讲解

    2021-10-04 17:25:48
  • C#动态生成DropDownList执行失败原因分析

    2023-08-30 22:37:28
  • SpringDataJPA在Entity中常用的注解介绍

    2023-11-27 09:40:36
  • 如何在C#9 中使用顶级程序 (top-level)

    2023-08-20 04:13:24
  • 使用Java构造和解析Json数据的两种方法(详解一)

    2023-01-26 01:51:18
  • bs架构和cs架构的区别_动力节点Java学院整理

    2021-09-18 22:06:18
  • Java四位电话号码的加密方法

    2022-08-20 16:04:29
  • Java中&和&&的区别简单介绍

    2023-02-23 12:12:23
  • java 中二分法查找的应用实例

    2021-10-18 08:43:33
  • C#实现客户端弹出消息框封装类实例

    2022-06-26 17:33:08
  • Android巧用ViewPager实现左右循环滑动图片

    2021-07-13 16:32:32
  • asp之家 软件编程 m.aspxhome.com