字符流:每次操作对对象单位是字符的输入或者输出,最常用的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),还可以继续编辑。