广告
返回顶部
首页 > 资讯 > 后端开发 > Python >一起来学习JavaIO的转化流
  • 825
分享到

一起来学习JavaIO的转化流

2024-04-02 19:04:59 825人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

目录Java io 转化流乱码引起转换流读取乱码转换流介绍InputStreamReaderOutputStreamWriter总结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类继承关系及构造函数

在这里插入图片描述

InputStreamReaderReader的一个子类,它其中的构造函数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类继承关系及构造函数

在这里插入图片描述

OutputStreamWriterWriter的一个子类,它其中的构造函数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文件。

在这里插入图片描述

总结

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

--结束END--

本文标题: 一起来学习JavaIO的转化流

本文链接: https://www.lsjlt.com/news/143423.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 一起来学习JavaIO的转化流
    目录Java IO 转化流乱码引起转换流读取乱码转换流介绍InputStreamReaderOutputStreamWriter总结Java IO 转化流 乱码引起转换流 读取乱码 ...
    99+
    2022-11-13
  • 一起来学习一下JavaScript的事件流
    目录1. 什么是事件流?2. 事件流模型2.1)事件冒泡2.2)事件捕获3. DOM事件流总结1. 什么是事件流 ? 在学习事件流之前我们先看...
    99+
    2022-11-13
  • 一起来学习Vue的组件化
    目录背景定义分类优势首屏加载优化组件之间的关系总体上可以分为两大类:常见使用场景可以分为三类:总结说起组件化,我毕设写的就是和组件化相关的。 当时还拿了优,运气! 话不多说,直接...
    99+
    2022-11-13
  • 一起来学习TypeScript的类型
    目录前言一、类型声明 二、类型1.number2.string3.boolean 4.字面量 5.联合类型 6.any 7.unkn...
    99+
    2022-11-13
  • 一起来学习Python的列表
    目录列表更多的方法列表的嵌套总结列表更多的方法 index():返回指定数据所在位置的下标 (注意:如果查找的数据不存在则报错。)。count():统计指定数据在当前列表中出现的次数...
    99+
    2022-11-13
  • 一起来学习JAVA的运算符
    目录一、赋值运算符二、复合赋值运算符三、算数运算符四、关系运算符五、自运算符六、逻辑运算符七、条件运算符(三元运算符)总结运算符优先级表: 一、赋值运算符 运算符:【=】 含义:把...
    99+
    2022-11-13
  • 一起来学习JavaScript的BOM操作
    目录window对象全局作用域常见事件调节窗口大小定时器setTimeoutthis指向问题location对象转跳页面location常见方法总结window对象 BOM的核心对象...
    99+
    2022-11-13
  • 一起来学习C语言的字符串转换函数
    字符串转整数 字符串转换为整数的函数有两个,他们的函数原型如下: int __cdecl atoi(const char *_Str); long __cdecl atol(...
    99+
    2022-11-13
  • Python中的集合一起来学习一下
    目录一、什么是集合二、集合的创建方式三、集合的相关操作3.1集合元素的判断操作3.2集合元素的新增操作3.3集合元素的删除操作四、集合之间的关系五、集合的数学操作六、集合生成式总结一...
    99+
    2022-11-13
  • 一起来学习Java的栈和队列
    目录栈队列阻塞队列双端队列总结栈 package com.yuzhenc.collection; import java.util.Stack; public class Te...
    99+
    2022-11-13
  • 一起来学习JavaScript的语法基础
    目录1、输入输入语句2、变量变量语法扩展变量命名规范3、数据类型3.1 基本数据类型3.2 获取变量数据类型3.3 数据类型转换4、运算符算术运算符递增和递减运算符比较运算符逻辑运算...
    99+
    2022-11-13
  • 一起来学习Vue的生命周期
    目录生命周期生命周期的简单介绍beforeCreate与createdbeforeCreate()created()beforeMount与mountedbeforeMount()m...
    99+
    2022-11-13
  • 一起来学习一下python的数据类型
    目录内置数据类型获取数据类型【type()】str:转换为str(字符串)类型int:转换为int类型float:转换为float类型complex:转换为complex(复数)类型...
    99+
    2022-11-13
  • 一起来学习一下python的数字类型
    目录int数字int类型Float类型complex类型int(),float(),complex()类型之间的转换总结int 数字 python 有3种数字类型int: 整数类型f...
    99+
    2022-11-13
  • 一起来学习C++的构造和析构
    目录1. 构造函数 1.1 构造函数长什么样子1.2 构造函数干嘛的1.3 思考2. 析构函数2.1 析构函数长什么样子2.2 析构函数用来干嘛(什么时候需要自己手动写析构...
    99+
    2022-11-13
  • 一起来学习Python的元组和列表
    目录1 元组2 列表总结1 元组 同一元组中元素的数据类型可以不同 元组中只包含一个元素时,需要在元素后面添加逗号,否则圆括号会被当做运算符使用 元组的创建:赋值命令=或内置函数tu...
    99+
    2022-11-13
  • 一起来学习C#的观察者模式
    using System; using System.Collections.Generic; public class Example { public static vo...
    99+
    2022-11-13
  • 一起来学习C++的动态内存管理
    目录1.new和delete2.new和delete在底层是怎么实现的:2.1new底层的实现: 我们先来new一个test类型的空间。2.2delete底层的实现: 我们执行del...
    99+
    2022-11-13
  • 一起来学习C++中remove与erase的理解
    目录erase简介remove简介代码示例代码分析remove是如何工作的?remove的工作流程总结erase 简介 vector 中 erase 函...
    99+
    2022-11-13
  • 一起来学习React元素的创建和渲染
    目录React和ReactDOMReact初体验创建React元素JSXJSX初体验总结React 是一个用于构建用户界面的 JavaScript 库 它包括两个库:react.js...
    99+
    2022-11-13
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作