字符流(字符输入流和字符输出流)

概述
当使用字节流读取文本文件时,可能会有一个小问题。就是遇到中文字符时,可能不会显示完整的字符,那是因为一个中文字符可能占用多个字节存储。所以Java提供一些字符流类,以字符为单位读写数据,专门用于处理文本文件。

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

磁盘-->内存

public void close():关闭此流并释放与此流相关联的任何系统资源。

public int read():从输入流读取一个字符。

public int read(char[] cbuf):从输入流中读取一些字符。

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

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

Tips:字节与字符的对应规则。Windows系统的中文编码默认时GBK编码表。IDEA中utf-8。

构造方法:(红色为常用)

构造方法摘要

FileReader(File file)
          在给定从中读取数据的 File 的情况下创建一个新 FileReader。

FileReader(FileDescriptor fd)
          在给定从中读取数据的 FileDescriptor 的情况下创建一个新 FileReader。

FileReader(String fileName)
          在给定从中读取数据的文件名的情况下创建一个新 FileReader

参数:String name文件路径;File file文件

构造方法的作用:

1.创建一个FileReader对象

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

字符输入流的使用步骤:

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

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

3.释放资源。
 

// 创建FileReader对象,构造方法中绑定要读取的数据源;
FileReader fr = new FileReader("D:\\a\\a.txt");
// 使用FileReader对象中的方法read读取文件
int len = 0;
while((len = fr.read()) != -1){ // 读到末尾
    // 一个字符-->ASCII码对应
    // 你-->20320
    System.out.println(len);
    // 你-->20320-->你
    System.out.println((char)len); // 大到小,强制转换
}
fr.close(); // 释放资源
// int read(char[] cbuf)一次读取读个字符,将字符读入数组。
char[] cs = new char[1024]; // 存储读取到的多个字符
int len = 0; // 记录每次读取的有效字符个数
while((len = fr.read(cs)) != -1){
    /*
    String类的构造方法
    String(char[] value)把字符数组转换为字符串
    String(chaar[] value,int offset,int count)把字符数组的一部分转换为字符串
    offset数组的开始索引,count转换的个数
     */
    System.out.println(new String(cs,0,len));
}
fr.close(); // 释放资源

字符输出流Writer

java.io.Writer抽象类时标识用于写出字符流的所有类的超类,将指定的字符信息写出到目的地。它定义了字节输出流的基本共性功能方法。

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类是写出字符到文件的便利类。构造时使用系统默认的字符编码和默认字节缓冲区。

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

构造方法:

构造方法摘要
FileWriter(File file)
          根据给定的 File 对象构造一个 FileWriter 对象。


FileWriter(File file, boolean append)
          根据给定的 File 对象构造一个 FileWriter 对象。


FileWriter(FileDescriptor fd)
          构造与某个文件描述符相关联的 FileWriter 对象。


FileWriter(String fileName)
          根据给定的文件名构造一个 FileWriter 对象。


FileWriter(String fileName, boolean append)
          根据给定的文件名以及指示是否附加写入数据的 boolean 值来构造 FileWriter 对象。

 参数:写入数据的目的地

String name 文件路径;File file 文件

构造方法作用:

1.创建一个FileWriter对象;

2.会根据构造方法中传递的文件/文件路径,创建文件;

3.会把FileWriter对象指向创建好的文件。

字符输出流的使用步骤:

1.创建一个FileWriter对象;

2.构造方法中绑定要写入数据的目的地;

3.使用FileWriter对象中的方法writer,把数据据写入到内存缓冲区(字符转换为字节的过程)中;

4.使用FileWriter对象中的方法flush,把内存缓冲区中的数据,刷新到文件中;

4.释放资源
 

FileWriter fw = new FileWriter("D:\\a\\abc.txt");
// 97-->a
fw.write(97); 
fw.flush(); // 如果都不写,则在缓冲区,没有刷新进文件中
fw.close();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值