Java——IO流(二)-(1/7):字符流-FileReader、FileWriter、字符输出流的注意事项(构造器及常用方法、小结)

目录

文件字符输入流-读字符数据进来

介绍

构造器及常用方法

实例演示

文件字符输出流-写字符数据出去

介绍、构造器及常用方法

实例演示

字符输出流使用时的注意事项

小结


文件字符输入流-读字符数据进来

介绍

FileReader(文件字符输入流)

  • 作用:以内存为基准,可以把文件中的数据以字符的形式读入到内存中去。

构造器及常用方法

构造器说明
public FileReader(File file)创建字符输入流管道与源文件接通
public FileReader(String pathname)创建字符输入流管道与源文件接通
方法名称说明
public int read()每次读取一个字符返回,如果发现没有数据可读会返回-1.
public int read(char[] buffer)每次用一个字符数组去读取数据,返回字符数组读取了多少个字符,如果发现没有数据可读会返回-1.

实例演示

文件Temp.txt的内容如下:

每次读取一个字符

import java.io.FileReader;
import java.io.Reader;

public class FileReaderTest1 {
    public static void main(String[] args) {
        try (
                //1.创建一个文件字符输入流管道与源文件接通
                Reader fr = new FileReader("untitled/src/Temp.txt");
                ){
            //2.读取文本文件的内容
            int c;      //记住每次读取的字符编号
            while( (c = fr.read())!= -1 ){
                System.out.print((char) c);
            }
            //每次读取一个字符的形式,性能肯定是比较差的。
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

 运行结果:

每次读取多个字符 

import java.io.FileReader;
import java.io.Reader;

public class FileReaderTest1 {
    public static void main(String[] args) {
        try (
                //1.创建一个文件字符输入流管道与源文件接通
                Reader fr = new FileReader("untitled/src/Temp.txt");
                ){
            //2.读取文本文件的内容

            //3.每次读取多个字符
            char[] buffer = new char[3];
            int len;        //记住每次读取了多少个字符
            while( (len = fr.read(buffer)) != -1 ){
                //读取多少倒出多少
                System.out.println(new String(buffer, 0, len));
            }
        }catch (Exception e){
            e.printStackTrace();
        }
    }
}

文件字符输出流-写字符数据出去

介绍、构造器及常用方法

FileWriter(文件字符输出流)

  • 作用:以内存为基准,把内存中的数据以字符的形式写出到文件中去。
构造器说明
public FileWriter(File file)根据文件名创建字节输出流管道与源文件对象接通
public FileWriter(String filepath)根据文件路径创建字节输出流管道与源文件路径接通
public FileWriter(File file, boolean append)创建字节输出流管道与源文件对象接通,可追加数据
public FileWriter(String filepath, boolean append)创建字节输出流管道与源文件路径接通,可追加数据
方法名称说明
void write(int c)写一个字符
void write(String str)写一个字符串
void write(String str, int off, int len)写一个字符串的一部分
void write(char[] cbuf)写入一个字符数组
void write(char[] cbuf, int off, int len) 写入字符数组的一部分

实例演示

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

public class FileWriterTest1 {
    public static void main(String[] args) {
        try(
                //0.创建一个文件字符输出流管道与目标文件接通
//                Writer fw = new FileWriter("HelloWorld/src/Temp.txt");
                //追加数据的管道(不会覆盖原数据)
                Writer fw = new FileWriter("HelloWorld/src/Temp.txt",true);
                ){
            //1.public void write(int c): 写一个字符出去
            fw.write('a');
            fw.write(97);
            fw.write('零');
            //换行
            fw.write("\r\n");

            //2.public void write(String s):写一个字符串出去
            fw.write("我爱你中国abc");
            fw.write("\r\n");

            //3.public void write(String c,int pos,int len):写字符串的一部分出去
            fw.write("你当像鸟飞往你的山",4,5);
            fw.write("\r\n");

            //4.public void write(char[] buffer):写一个字符数组出去
            char[] buffer = {'梦','醒','a','b','c'};
            fw.write(buffer);
            fw.write("\r\n");

            //5.public void write(char[] buffer,int pos,int len):写字符数组的一部分出去
            fw.write(buffer,0,2);
            fw.write("\r\n");
        }catch (Exception e){
            e.printStackTrace();
        }
    }
}

运行之后Temp.txt的内容:

字符输出流使用时的注意事项

  • 字符输出流写出数据后,必须刷新流,或者关闭流,写出去的数据才能生效

写出的字符数据会先放到缓冲区里面,而缓冲区位于内存,当缓冲区一次性进行系统的资源调用时,才算真正写出了字符。

所以需要刷新或者关闭流才能使得写出去的数据生效,同时,当缓冲区满时,也会自动取调用系统资源。

方法名称说明
public void flush() throws IOException刷新流,也就是将内存中缓存的数据立即写到文件中去生效
public void close() throws IOException关闭流的操作,包含了刷新

小结

字节流、字符流的使用场景小结

  • 字节流适合做一切文件数据的拷贝(音视频,文本);字节流不适合读取中文内容输出。
  • 字符流适合做文本文件的操作(读,写)。

END


学习自:黑马程序员——Java课程

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值