一起来学习Java|一起来学习Java IO的转化流
目录
- Java IO 转化流
- 乱码引起转换流
- 读取乱码
- 转换流介绍
- InputStreamReader
- OutputStreamWriter
- 总结
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); //将字节输入流,转换为字符流 并指定编码格式为 utf8InputStreamReader 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文件。
文章图片
总结 【一起来学习Java|一起来学习Java IO的转化流】本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注脚本之家的更多内容!
推荐阅读
- 使用Visual|使用Visual Studio编写单元测试
- 一篇文章带你学习Python3的高级特性(2)
- 设计一个person类java_定义一个Person类,含姓名、性别、年龄等字段;继承Person类设计...
- JS三座大山再学习(二、作用域和闭包)
- 算法|排序算法和二分查找
- 如何向上管理
- 学习SpringMVC必知必会(3)~springmvc的请求和响应
- vue|前端合并单元格,一看就会
- WPF|基于WPF的桌面宠物开发(一) (WPF简介+环境搭建+简单界面)
- vue|一个基于vue3+vite+ts的完整项目