有关字符流的输入输出流

字符流:每次操作对对象单位是字符的输入或者输出,最常用的FileReader和FileWriter两个字节流的子类,其中FileReader是输入流,FileWriter是输出流

一、字符输入流

概念:

java.io.Reader抽象类是标识用于读取字符流的所有类的超类,可以读取字符信息到内存中。它定义了字符输入流的基本共性功能方法,是用于读取字符流的所有类的最上层父类,其中FileReader类是其常用子类。

FileReader类

java.io.FileReader类是读取字符文件的便利类。构造时使用系统默认的字符编码和默认字节缓冲区。

作用:把硬盘文件中的数据以字符的方式读取到内存中。

构造方法:
FileReader(File file) 在给定从中读取数据的 File 的情况下创建一个新 FileReader。
FileReader(FileDescriptor fd)  在给定从中读取数据的 FileDescriptor 的情况下创建一个新 FileReader。
FileReader(String fileName)在给定从中读取数据的文件名的情况下创建一个新 FileReader。

构造方法的作用:

1.创建一个FileReader对象

2.会把FileReader对象指向要读取的文件

字符输入流的使用步骤:

1.创建FileReader对象,构造方法中绑定要读取的数据源;

2.使用FileReader对象中的方法read读取文件;

3.释放资源。

案例:

package com.字符流;

import java.io.*;
import java.util.Arrays;

public class ReaderTest {//输入流
    public static void main(String[] args) throws IOException {
        File f1= new File("F:/a.txt");
        //定义字符输入流:字节流汉子占三个字节 字符流中汉字占一个字符
        Reader in= new FileReader(f1);

        //每次读取一个字符
//        int n= in.read();
//        System.out.println((char)n);
//
//        int n1=in.read();
//        System.out.println((char)n1);

        //每次读取缓冲区
        char[] buffer= new char[7];
        int n = in.read(buffer);//每次最多读取数组长度个字符  把读取的字符存入数组中 返回的是实际读取的字符串
        String s = new String(buffer,0,n);//获取数组   从第0个索引 截取读取有效字符长度
        System.out.println(s);

        int n1 = in.read(buffer);
        String s1 = new String(buffer,0,n1);
        System.out.println(s1);

        in.close();


    }
}

 

二、字符输出流

概念:

java.io.Writer抽象类时标识用于写出字符流的所有类的超类,将指定的字符信息写出到目的地。它定义了字节输出流的基本共性功能方法。Writer也是一个抽象类,是用于写出字符流的所有类的最上层父类,其中FileWriter 类是其常用子类。

void write(int c):写入单个字符。

void write(char[] cbuf):写入字符数组。

abstract void write(char[] cbuf,int off,int len):写入字符数组的某一部分,off数组的开始索引,len写的字符个数。

void write(String str):写入字符串。

void write(String str,int off,int len):写入字符串的某一部分,off字符串的开始索引,len写的字符个数。

void flush():刷新该流的缓冲。

void close():关闭此流,但要先刷新它。

FileWriter类

java.io.FileWriter类是写出字符到文件的便利类。构造时使用系统默认的字符编码和默认字节缓冲区。

作用:把内存中的字符数据写入到文件中

构造方法:(√常用

1.FileWriter(File file)根据给定的 File 对象构造一个 FileWriter 对象。
2.FileWriter(File file, boolean append)  根据给定的 File 对象构造一个 FileWriter 对象。
3.FileWriter(FileDescriptor fd)  构造与某个文件描述符相关联的 FileWriter 对象。
4.FileWriter(String fileName) 根据给定的文件名构造一个 FileWriter 对象。
5.FileWriter(String fileName, boolean append) 根据给定的文件名以及指示是否附加写入数据的 boolean 值来构造 FileWriter 对象。

案例:

package com.字符流;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;

public class WriterTest {//输出流
    public static void main(String[] args) throws IOException {
        File f1= new File("F:/b.txt");
        if (f1.exists()){//判断是否有b.txt
            f1.createNewFile();
        }

        //定义字符输出流
        Writer out = new FileWriter(f1);
//        out.write(97);//ASCII  a
//        out.write((int)'我');

        char[] ch={'我','喜','欢','你'};
        out.write(ch,0,4);

        out.write("河南开封");
        out.flush();//必须刷新缓冲区 才会真正写入磁盘

        out.close();


    }
}

三、close和flush(关闭和刷新)

①flush方法

flush,刷新的意思,也就是说我们写入了一个数据,得刷新下才会将数据保存。在使用flush方法后,还可以继续写入文件。

②close方法

close方法,关流,它在关流时底层会调用flush方法。在使用close方法后,就不可以继续写入文件了。

总之close和flush的区别:

close就好比我们写东西在记事本上,保存并退出编辑。

flush就好比我们写记事本,点保存但是没退出(Ctrl+s),还可以继续编辑。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值