java中IO流的学习笔记(3、转换流的写入和读取)

java转换流:

由于java中一个中文字符是由两个字节组成,在控制台显示文件时如果使用单字节显示则会出现乱码的情况,所以java提供了转换流。
字符流=字节流+编码表

编码表:
由现实世界的字符和对应的数值组成的一张表。(如下图)
这里写图片描述

下面我们结合代码来看字符流的具体应用:

OutputStreamWriter

OutputStreamWriter一共有五个写入方法
/*
* OutputStreamWriter的方法:
* public void write(int c):写一个字符
* public void write(char[] cbuf):写一个字符数组
* public void write(char[] cbuf,int off,int len):写一个字符数组的一部分
* public void write(String str):写一个字符串
* public void write(String str,int off,int len):写一个字符串的一部分
*
*/

package com.lj.iodemo;

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

public class IODemo7 {
    public static void main(String[] args) throws IOException {
        // 构造方法
        // OutputStreamWriter(OutputStream out) 创建使用默认字符编码的 OutputStreamWriter。
        OutputStreamWriter outputStreamWriter = new OutputStreamWriter(new FileOutputStream("osw.txt"));

        // public void write(int c):写一个字符
        outputStreamWriter.write('a');
        outputStreamWriter.write(97);

        // void close() 关闭此流,但要先刷新它。
        outputStreamWriter.flush();

        // public void write(int c):写一个字符数组
        char[] cs = { 'a', 'b', 'c', 'd', 'e' };
        outputStreamWriter.write(cs);
        outputStreamWriter.flush();

        // public void write(char[] cbuf):写一个字符数组的一部分
        char[] cs2 = { 'q', 'w', 'e', 'r', 't' };
        outputStreamWriter.write(cs2, 1, 2);
        outputStreamWriter.flush();

        // public void write(String str):写一个字符串
        String s = "我是中文";
        outputStreamWriter.write(s);
        outputStreamWriter.flush();

        // public void write(String str,int off,int len):写一个字符串的一部分
        String s2 = "黑色看起来顺眼多了";
        outputStreamWriter.write(s2, 0, 2);
        outputStreamWriter.flush();

        outputStreamWriter.close();
    }
}

上面代码需要我们注意的是

close()和flush()的区别?
A:close()关闭流对象,但是先刷新一次缓冲区。关闭之后,流对象不可以继续再使用了。
B:flush()仅仅刷新缓冲区,刷新之后,流对象还可以继续使用。

OutputStreamWriter

/*
* InputStreamReader的方法:
* int read():一次读取一个字符
* int read(char[] chs):一次读取一个字符数组
*/
代码如下:

package com.lj.iodemo;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;

public class IODemo8 {
    public static void main(String[] args) throws IOException {
        /*
         * InputStreamReader的方法: int read():一次读取一个字符 int
         * read(char[]chs):一次读取一个字符数组
         */

        // 构造方法 InputStreamReader(InputStream in) 创建一个使用默认字符集的
        // InputStreamReader。
        InputStreamReader inputStreamReader = new InputStreamReader(new FileInputStream("osw.txt"));
        InputStreamReader inputStreamReader2 = new InputStreamReader(new FileInputStream("osw.txt")); 
        // int read():一次读取一个字符
        int by = 0;
        while ((by = inputStreamReader.read()) != -1) {
            System.out.print((char)by);
        }
        System.out.println("-----------------");

        //int read(char[] chs):一次读取一个字符数组
        char[] cs = new char[1024];
        int len = 0;
        while((len = inputStreamReader2.read(cs))!=-1){
            System.out.print(new String(cs,0,len));
        }

        inputStreamReader.close();
        inputStreamReader2.close();
    }
}

通过上面两种方式我们就可以完成java字符流对文件的读取。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值