Writer类
Writer类是所有处理字符输出的超类,其下面有多个子类继承,主要作用于对文件的写操作。
Writer类有以下两个构造方法
protected Write(){} 空参构造,创建一个新的字符流
protected Write(Object lock){} 有参构造,创建一个新的字符流并指定一个Object类型的参数
FileWriter
此类继承了OutputStreamWriter类,而OutputStreamWriter类又继承了Writer父类,默认继承了所有的方法,用于对文件进行写的操作。
构造器
//根据给定的字符串名称作为目标文件的路径
public FileWriter(String fileName) throws IOException {
super(new FileOutputStream(fileName)); //继承父类的构造
}
//根据给定的字符串名称作为目标文件的路径,并且是否可以追加内容到文本,ture表示可以,false不行
public FileWriter(String fileName, boolean append) throws IOException {
super(new FileOutputStream(fileName, append)); //继承父类的构造
}
//根据一个File对象指定路径
public FileWriter(File file) throws IOException {
super(new FileOutputStream(file));
}
//根据一个File对象指定路径,并指定是否可以追加内容到文本
public FileWriter(File file, boolean append) throws IOException {
super(new FileOutputStream(file, append));
}
//制定一个FileDescriptor类作为路径名称
public FileWriter(FileDescriptor fd) {
super(new FileOutputStream(fd));
}
基本方法
write()
write是对目标路径文件进行写入数据操作,它有多个重载的方法
public void write(int c) throws IOException {} //向目标文件写一个字符,参数为int类型,会根据Unicode码转换为字符显示
public void write(char cbuf[]) throws IOException {} //根据字符数组参数写入数据
abstract public void write(char cbuf[], int off, int len) throws IOException; //根据字符数组写入数据,并指定写入的长度区间
public void write(String str) throws IOException {} //根据字符串参数写入数据
public void write(String str, int off, int len) throws IOException { //根据字符参数写入数据,并指定长度区间
示例
public class Write {
public static void main(String[] args) {
Writer wr = new FileWriter("src//1.txt"); //设置路径在项目src下面的1.txt目录
wr.write(97); //整数会被转换为对应的Unicode码作字符显示
char[] ch = {'c','h','a','r'}; //创建一个char型数组存放数据
wr.write(ch); //把数组中的数据写入到文件中
wr.write(ch,1,2); //写入数组中的数据,并从1-2索引区间开始写
wr.write("Hello,World"); //向文件中写入字符串
wr.write("String",0,3); //指定0-3索引区间开始写入
wr.close(); //关闭流,释放关联的所有资源。
}
}
流的处理
flush和close方法
flush方法用于清空缓冲区。将缓冲区的内容强制输出到文件中, 一般在关闭输出流之前,都先要调用flush方法强制缓冲区中的内容输出并清空缓冲区。
示例
Writer wr = new FileWriter("src//1.txt");
wr.write("this is a write method");
wr.flush(); //刷新到缓冲区
wr.close(); //关闭流
close方法是在流使用完毕后释放流占用的资源,减少内存的损耗。
Writer wr = new FileWriter("src//1.txt");
wr.write("demo close method");
wr.close(); //每次流使用完毕后都要关闭流
Reader类
Reader类是处理Java中对文件读取字符的操作,主要用于对字符的处理,是所有字符输入流中的父类
protected Reader() {} //默认无参构造方法
protected Reader(Object lock) {} //根据Object类设置参数
FileReader
FileReader类和FileWriter类大致相同,都是继承了两个父类,区别在于一个是写数据,一个是读数据。
构造方法
//根据指定字符串作为文件路径或名称
public FileReader(String fileName) throws FileNotFoundException {
super(new FileInputStream(fileName));
}
//根据一个File对象作为文件的路径或名称
public FileReader(File file) throws FileNotFoundException {
super(new FileInputStream(file));
}
//根据FileDescriptor类作为路径参数
public FileReader(FileDescriptor fd) {
super(new FileInputStream(fd));
}
读数据操作
read()方法
//读取单个字符
public int read() throws IOException {}
//根据char数组作为条件读取
public int read(char cbuf[]) throws IOException {}
//根据一个char数组作为参数,并制定读取的长度区间
abstract public int read(char cbuf[], int off, int len) throws IOException;
示例
Reader re = new FileReader("src//1.txt"); //指定项目src目录下的1.txt文本文件
System.out.println((char)re.read()); //读取单个字符并强转为char类型,否则打印的是对应Unicode码表数值
re.close(); //关闭流,释放资源
Reader re = new FileReader("src//1.txt");
char[] ch = new char[1024]; //设置1024个读取容量
System.out.println(re.read(ch)); //放入char数组
re.close(); //关闭流释放资源
Reader re = new FileReader("src//1.txt");
char[] ch = new char[1024];
System.out.println(re.read(ch,0,3)); //设置char数组并根据指定区间进行获取
re.close();
使用循环读取
Reader re = new FileReader("src//1.txt");
int len = 0; //定义初始值
while((len = re.read()) != -1) { //如果读取的内容不等于-1,也就是读完为止
System.out.print((char)len); //输出内容转换为字符
}
re.close(); //关闭流
文件之间的读写复制
案例:创建两个文本文件分别使用FileReader和FileWriter类做读写操作。
public class text {
//分别在项目src目录创建一个1.txt和2.txt文本文件
public static void main(String[] args) throws IOException {
Reader read = new FileReader("src\\1.txt");
Writer write = new FileWriter("src\\2.txt");
char[] ch = new char[1024]; //创建一个char数组,设置初始值,可读1024个字符
int len = 0; //定义初始值
while((len = read.read(ch)) != -1) { //如果读取数据不等于-1,读完为止
write.write(ch,0,4); //读取0-4号索引区间的值,根据文本内容的字符长度计算
}
read.close(); //关闭输入流
write.close(); //关闭输出流
}
}