好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

一起来学习Java IO的转化流

Java IO 转化流

乱码引起转换流

读取乱码

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

代码示例:

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

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

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

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

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

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

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

 

转换流介绍

转换流有  InputStreamReader  和  OutputStreamWriter 两种。

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

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

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

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

 

InputStreamReader

InputStreamReader 类继承关系及构造函数

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

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

代码示例:

import java.io.*;
 public class InputStreamReaderTest {
    public static void main(String[] args) throws IOException {
        String filePath = "e:JavaJava.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();
    }
}
 

运行结果:

内容读取成功~~~

 

OutputStreamWriter

OutputStreamWriter 类继承关系及构造函数

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

代码示例:

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

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

运行结果:

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

 

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注的更多内容!

原文地址:https://blog.csdn.net/sheng0113/article/details/123639706

查看更多关于一起来学习Java IO的转化流的详细内容...

  阅读:30次