一起来学习Java IO的转化流
作者:WYSCODER 发布时间:2023-11-26 20:38:30
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文件。
来源:https://blog.csdn.net/sheng0113/article/details/123639706
猜你喜欢
- 一:SparkSQL1.SparkSQL简介Spark SQL是Spark的一个模块,用于处理结构化的数据,它提供了一个数据抽象DataFr
- Java异常层次结构Exception异常RuntimeException与非RuntimeException异常的区别:非RuntimeE
- PipedOutputStream和PipedInputStream在java中,PipedOutputStream和PipedInputS
- Android Build类的详解及简单实例一、类结构:java.lang.Object? android.os.Build二、类概述:从系
- 一、概述我们对于这个图片肯定会非常熟悉,这两幅图片我们都可以看做是一个文件结构,对于这样的结构我们称之为树形结构。在数据结构中我们了解到可以
- 第一次写上传图片的代码,碰到很多问题。昨天做了整整一天,终于在晚上的时候成功了。大声欢呼。但是,做完之后,还是有很多问题想不通。所以在这里也
- Mybatis与JPA的优缺点JPA java持久层API可理解为一种规范,Hibernate就是其具体一个实现。它的实现应用是Spring
- 简单几步,实现SpringMVC+servlet3.0文件上传功能:第一步:配置web.xml文件中的servlet,添加multipart
- Mybatis @Select、foreachforeach属性属性描述item循环体中的具体对象。支持属性的点路径访问,如item.age
- 1. 类的定义面向对象是通过类和对象去描述和代表万千事物对象的,首先我们需要知道如何去定义一个类。类的组成是由属性和行为两部分组成属性:在类
- 创建类的对象 = 类的实例化 = 实例化类类和对象的使用(面向对象思想落地的实现):1.创建类,设计类的成员2.创建类的对象3.通过“对象.
- 下面是一个AOP实现的简单例子:首先定义一些业务方法:/** * Created with IntelliJ IDEA. 
- 无论是用Eclipse还是用Android Studio做android开发,都会接触到jar包,全称应该是:Java Archive,即j
- 效果:原图加水印后的图片废话不多说,直接上代码代码:package com.example.demo;import java.awt.Alp
- indexof方法:注解:indexOf 方法返回一个整数值,指出 String 对象内子字符串的开始位置。如果没有找到子字符串,则返回-1
- 目录什么是Spring的占位符?Spring什么时候去解析并占位符什么是Spring的占位符?在以前的Spring Xml配置中我们可能会有
- 本文为大家分享了Android实现带动画效果的可点击展开TextView 制作代码,效果图: 收起(默认)效果:点击展开后的效果:源码: 布
- 前言在RequestMappingHandlerAdapter对request进行了适配,并且调用了目标handler之后,其会返回一个Mo
- 最近有一个项目要用到年份周期,用于数据统计图表展示使用,当中用到年份周期,以及年份周期所在的日期范围。当初设想通过已知数据来换算年份周期,经
- 通过反射根据提供的表名、POJO类型、数据对象自动生成sql语句。如名为 User 的JavaBean与名为 user 的数据库表对应,可以