一起来学习Java IO的转化流

网友投稿 271 2022-08-18


一起来学习Java IO的转化流

目录java IO 转化流乱码引起转换流读取乱码转换流介绍InputStreamReaderOutputStreamWriter总结

Java IO 转化流

乱码引起转换流

读取乱码

读取电脑磁盘上的Java.txt文件内容,文件路径: e:\Java\Java.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:\\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();

}

}

}

}

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

因为程序默认是以 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:\\Java\\Java.txt";

FileInputStream fileInputStream = new FileInputStream(http://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:\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文件。

总结

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


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:剑指Offer之Java算法习题精讲链表专项训练
下一篇:剑指Offer之Java算法习题精讲数组查找与字符串交集
相关文章

 发表评论

暂时没有评论,来抢沙发吧~