转换流InputStreamReader类和OutputStreamWriter类

转换流InputStreamReaderOutputStreamWriter

基本介绍:

转换流就是将字节转换成字符流的过程,并且在可以构造器中传入编码,解决中文乱码问题

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-B3d7Vqre-1646659092106)(E:\Typora笔记\java笔记\img\image-20220306212515141.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OslUf0RA-1646659092107)(E:\Typora笔记\java笔记\img\image-20220306201649846.png)]

案例:

使用读取文件引起的乱码问题

package IO_.transformation;

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

/**
 * @author: 海康
 * @version: 1.0
 */
public class CodeQuestion {
    public static void main(String[] args) throws IOException {
        String readPath = "e:\\IDEACODE\\javase\\new2.txt";
        BufferedReader br = new BufferedReader(new FileReader(readPath));
        // 下面使用的一整行一整行的读取
        String s = "";
        while (( s = br.readLine())!= null){
            System.out.println(s);
        }
       // 在使用完流后一定要关闭流,释放资源
       if (br != null){
           br.close();
       }
    }
}
InputStreamReader

继承关系图及构造器

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xNHoI2Of-1646659092108)(E:\Typora笔记\java笔记\img\image-20220306204144239.png)]

构造器

Constructor and Description
InputStreamReader(InputStream in) 创建一个使用默认字符集的InputStreamReader。
InputStreamReader(InputStream in, Charset cs) 创建一个使用给定字符集的InputStreamReader。
InputStreamReader(InputStream in, CharsetDecoder dec) 创建一个使用给定字符集解码器的InputStreamReader。
InputStreamReader(InputStream in, String charsetName) 创建一个使用命名字符集的InputStreamReader。

常用方法

Modifier and TypeMethod and Description
voidclose() 关闭流并释放与之相关联的任何系统资源。
intread() 读一个字符
intread(char[] cbuf, int offset, int length) 将字符读入数组的一部分。
booleanready() 告诉这个流是否准备好被读取。

案例演示 将字节转成字符流解决中文乱码问题

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LDpG3mjA-1646659092109)(E:\Typora笔记\java笔记\img\image-20220306212726156.png)]

package IO_.transformation;

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;

/**
 * @author: 海康
 * @version: 1.0
 */
public class InputStreamReader1 {
    public static void main(String[] args) throws IOException {
        // 将字节流转成字符流,并且解决中文乱码问题
        String filePath = "e:\\IDEACODE\\javase\\new2.txt";
        // 转成字符流
        InputStreamReader isr = new InputStreamReader(new FileInputStream(filePath),"utf-8");
        // 将其包装成BufferedReader
        BufferedReader br = new BufferedReader(isr);
        // 使用方式是整行的读取
        String line = "";
        while ((line = br.readLine())!=null){
            System.out.println(line);
        }

        // 在读取完毕一定要关闭流,在关闭流只需要关闭外层流即可
        if (isr != null){
            isr.close();
        }
    }
}
OutputStreamWriter

继承关系图及构造器

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-olT1fFW7-1646659092109)(E:\Typora笔记\java笔记\img\image-20220306204359036.png)]

构造器

Constructor and Description
OutputStreamWriter(OutputStream out) 创建一个使用默认字符编码的OutputStreamWriter。
OutputStreamWriter(OutputStream out, Charset cs) 创建一个使用给定字符集的OutputStreamWriter。
OutputStreamWriter(OutputStream out, CharsetEncoder enc) 创建一个使用给定字符集编码器的OutputStreamWriter。
OutputStreamWriter(OutputStream out, String charsetName) 创建一个使用命名字符集的OutputStreamWriter。

常用方法

Modifier and TypeMethod and Description
voidclose() 关闭流,先刷新。
voidflush() 刷新流。
voidwrite(char[] cbuf, int off, int len) 写入字符数组的一部分。
voidwrite(int c) 写一个字符
voidwrite(String str, int off, int len) 写一个字符串的一部分。

案例演示:将数据写入指定文件中,并将字节流转成字符流的方式处理

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-85a0Mkpp-1646659092110)(E:\Typora笔记\java笔记\img\image-20220306212704986.png)]

package IO_.transformation;

import java.io.BufferedWriter;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;

/**
 * @author: 海康
 * @version: 1.0
 */
public class OutputStreamWriter1 {
    public static void main(String[] args) throws IOException {
        String filePath = "e:\\IDEACODE\\javase\\haikang.txt";
        OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream(filePath,true),"utf-8");
        BufferedWriter bw = new BufferedWriter(osw);
        bw.write("湛江广州");

        // 在使用完流一定要关闭流释放资源
        if (bw != null){
            bw.close();
        }

        System.out.println("写入成功!!!");
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值