一起来学习Java IO的转化流
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(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文件。

总结
本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注脚本之家的更多内容!
相关文章
基于MockMvc进行springboot调试(SpringbootTest)
这篇文章主要介绍了基于MockMvc进行springboot调试(SpringbootTest),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下2019-10-10
Spring Boot Admin的使用详解(Actuator监控接口)
这篇文章主要介绍了Spring Boot Admin的使用详解(Actuator监控接口),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2021-05-05
springcloud项目占用内存好几个G导致服务器崩溃的问题
这篇文章主要介绍了springcloud项目占用内存好几个G导致服务器崩溃的问题,本文给大家分享解决方案供大家参考,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2020-10-10
SpringBoot传递单一参数时@RequestParam和@RequestBody的区别小结
用SpringBoot框架做项目时,经常需要前端给后端传递参数,本文主要介绍了SpringBoot传递单一参数时@RequestParam和@RequestBody的区别,具有一定的参考价值,感兴趣的可以了解一下2023-08-08
SpringBoot Admin升级boot等组件版本后无法监控微服务问题
这篇文章主要介绍了SpringBoot Admin升级boot等组件版本后无法监控微服务问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教2024-08-08
Spark学习笔记 (二)Spark2.3 HA集群的分布式安装图文详解
这篇文章主要介绍了Spark2.3 HA集群的分布式安装,结合图文与实例形式详细分析了Spark2.3 HA集群分布式安装具体下载、安装、配置、启动及执行spark程序等相关操作技巧,需要的朋友可以参考下2020-02-02


最新评论