Java基础 字节流、字符流( 四 )


3.1 字符输入流【Reader】
java.io.Reader 抽象类是表示用于读取字符流的所有类的超类 , 可以读取字符信息到内存中 。它定义了字符输入 流的基本共性功能方法 。
public void close() :关闭此流并释放与此流相关联的任何系统资源 。
public int read() : 从输入流读取一个字符 。
public int read(char[] cbuf) : 从输入流中读取一些字符 , 并将它们存储到字符数组 cbuf中。
3.2 FileReader类
java.io.FileReader 类是读取字符文件的便利类 。构造时使用系统默认的字符编码和默认字节缓冲区 。
小贴士:

  1. 字符编码:字节与字符的对应规则 。Windows系统的中文编码默认是GBK编码表 。idea中UTF-8
  2. 字节缓冲区:一个字节数组 , 用来临时存储字节数据 。
  3. 构造方法
  4. FileReader(File file) : 创建一个新的 FileReader  , 给定要读取的File对象 。
  5. FileReader(String fileName) : 创建一个新的 FileReader  , 给定要读取的文件的名称
  6. 当你创建一个流对象时 , 必须传入一个文件路径 。类似于FileInputStream
  7. 构造举例 , 代码如下:
public class FileReaderConstructor throws IOException{ public static void main(String[] args) {// 使用File对象创建流对象File file = new File("a.txt"); FileReader fr = new FileReader(file);// 使用文件名称创建流对象FileReader fr = new FileReader("b.txt");}}读取字符数据
  1. 读取字符: read 方法 , 每次可以读取一个字符的数据 , 提升为int类型 , 读取到文件末尾 , 返回 -1  , 循环读 取 , 代码使用演示:
public class FRRead {public static void main(String[] args) throws IOException {// 使用文件名称创建流对象FileReader fr = new FileReader("read.txt");// 定义变量 , 保存数据int b ;// 循环读取while ((b = fr.read())!=‐1) { System.out.println((char)b);}// 关闭资源fr.close();}}输出结果: 程序员小贴士:虽然读取了一个字符 , 但是会自动提升为int类型 。
2. 使用字符数组读取: read(char[] cbuf)  , 每次读取b的长度个字符到数组中 , 返回读取到的有效字符个数 ,  读取到末尾时 , 返回 -1  , 代码使用演示:
public class FRRead {public static void main(String[] args) throws IOException {// 使用文件名称创建流对象FileReader fr = new FileReader("read.txt");// 定义变量 , 保存有效字符个数int len ;// 定义字符数组 , 作为装字符数据的容器char[] cbuf = new char[2];// 循环读取while ((len = fr.read(cbuf))!=‐1) { System.out.println(new String(cbuf));}// 关闭资源fr.close();}}输出结果: 程序员序获取有效的字符改进 , 代码使用演示:
public class FISRead {public static void main(String[] args) throws IOException {// 使用文件名称创建流对象FileReader fr = new FileReader("read.txt");// 定义变量 , 保存有效字符个数int len ;// 定义字符数组 , 作为装字符数据的容器char[] cbuf = new char[2];// 循环读取while ((len = fr.read(cbuf))!=‐1) { System.out.println(new String(cbuf,0,len));}// 关闭资源fr.close();}}输出结果: 程序员3.3字符输出流【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() 关闭此流 , 但要先刷新它 。
3.4 FileWriter类
java.io.FileWriter 类是写出字符到文件的便利类 。构造时使用系统默认的字符编码和默认字节缓冲区 。
构造方法
FileWriter(File file) : 创建一个新的 FileWriter , 给定要读取的File对象
FileWriter(String fileName) : 创建一个新的 FileWriter , 给定要读取的文件的名称 。
当你创建一个流对象时 , 必须传入一个文件路径 , 类似于FileOutputStream 。
构造举例 , 代码如下:
public class FileWriterConstructor {public static void main(String[] args) throws IOException {// 使用File对象创建流对象File file = new File("a.txt"); FileWriter fw = new FileWriter(file);// 使用文件名称创建流对象FileWriter fw = new FileWriter("b.txt");}}


推荐阅读