一起来学习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


猜你喜欢
- 在使用xutils时遇到不能添加以来的问题,花了很长时间终于解决,网上添加依赖的方法很多,在此针对个人出现的问题作下笔记。我本想使用jar包
- CollapsingToolbarLayout作用是提供了一个可以折叠的Toolbar,它继承至FrameLayout,给它设置layout
- 发送邮件的主程序 import java.util.Properties; import common.util.Ema
- 话不多说,请看代码:string xmlFilePath = "D:\\log_xml\\MarInfo.xml"; /
- 一、Maven生命周期、阶段、目标 &nbs
- 实现Back键功能方法有:一:重写onBackPressed方法@Override public void onBackPress
- 1.关于7z首先在这里先介绍一下7z压缩软件,7z是一种主流的 压缩格式,它拥有极高的压缩比。在计算机科学中,7z是一种可以使用多种压缩算法
- 使用 WebView 时,我们通常会重写以下方法:shouldOverrideUrlLoading() onPageStarted()onP
- 最近再开发中遇到需要将文件上传到Linux服务器上,至此整理代码笔记。此种连接方法中有考虑到并发问题,在进行创建FTP连接的时候
- 本文实例讲述了Android编程实现下载时主界面与详细界面一致更新的方法。分享给大家供大家参考,具体如下:1、创建监听管理类public c
- 最近一直在对接接口,上游返回的都是 JSON 数据,我们需要将这些数据进行保存,我们可以解析成 Map 通过 key 的方式进行获取,然后
- ——声明,脑残人士远离,本博客的核心不是if-else+前缀,而是如何通过URL协议处理框架定义私有协议URI与URL的区别URI (uni
- 前言循环语句为众多程序员们提供了很大的便利,有while、do...while、for和 foreach。而且foreach语句很简洁,但是
- 问题描述springcloud项目部署或调试时,占用的内存特别多。当部署到服务器上去后,有可能导致服务器内存占用过多而崩溃。解决方案&nbs
- 本文实例为大家分享了Unity Shader实现黑幕过场效果的具体代码,供大家参考,具体内容如下一、效果演示二、实现Shader:黑幕过场着
- 本文实例为大家分享了Android自定义textview实现跑马灯效果的具体代码,供大家参考,具体内容如下xml布局<?xml ver
- 前言之前因为项目需求,其中使用到了图片的单击显示取消,图片平移缩放功能,昨天突然想再加上图片的旋转功能,在网上看了很多相关的例子,可是没看到
- 首先分析一下问题:其实这个红框不是android的bug,把编译模式从eng改成user就可以了,红框只是eng模式debug的时候提示你系
- 一、背景日常开发中,有时候需要根据某个 key 加锁,确保多线程情况下,对该 key 的加锁和解锁之间的代码串行执行。大家可以借助每个 ke
- properties和yml的区别这几天刚好看到Spring Boot当中有两种配置文件的方式,但是这两种配置方式有什么区别呢?proper