FileReader与FileWriter分别继承Reader和Writer,以字符为单位广泛用于文件操作的节点流。FileReader类用于从文本文件读数据,每次读入一个字符或者一个字符数组;FileWriter类用于从文本文件写数据,每次写入一个字符,一个字符数组或者一个字符串。
FileReader类常用的构造方法:
--- FileReader(File file),在给定从中读取数据的File的情况下创建一个新的FileReader。
--- FileReader(String fileName),在给定从中读取数据的文件名的情况下创建一个新的FileReader。
--- FileReader(FileDescriptor fd),在给定从中读取数据的FileDescriptor 的情况下创建一个新的FileReader。
FileWriter类常用的构造方法:
--- FileWriter(File file),根据给定的file对象构造一个FileWriter对象。注意写入文件时目录下的同名文件会被覆盖。
--- FileWriter(File file,boolean append),根据给定的file对象构造一个FileWriter对象。若append为true则写入文件时目录下的同名文件不会被覆盖,在已有文件的末尾添加内容。
--- FileWriter(FileDescriptor fd),构造与某个文件描述符相关联的FileWriter对象。
--- FileWriter(String fileName),根据给定的文件名构造一个FileWriter对象。
--- FileWriter(String fileName,boolean append),根据给定的f文件名构造一个FileWriter对象。若append为true则写入文件时目录下的同名文件不会被覆盖,在已有文件的末尾添加内容。
注意文件名和文件对象的区别以及是否加true的区别!
代码示例:
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class FileWriterTest {
public static void main(String[] args) {
FileReader fr=null;
FileWriter fw=null;
try{
File srcFile=new File("D:\\idea\\loafonajob\\untitled\\src\\hello.txt");//创建文件对象
File destFile=new File("D:\\idea\\loafonajob\\untitled\\src\\hello1.txt");//创建文件对象
fr=new FileReader(srcFile);//用文件对象创建FileReader
fw=new FileWriter(destFile,true);//用文件对象创建FileWriter,加上指示true
char[] cbuf=new char[5];
int len;
while((len=fr.read(cbuf))!=-1){
fw.write(cbuf,0,len);
System.out.println(cbuf);
}
}catch(Exception e){
e.printStackTrace();
}finally{
try{
if(fw!=null)
fw.close();
}catch (IOException e){
e.printStackTrace();
}finally {
try{
if(fr!=null)
fr.close();
}catch (IOException e){
e.printStackTrace();
}
}
}
}
}
注意FileReader没有指示true,FileWriter有指示true,所以写入文件时不会覆盖,即每运行一次hello1.txt文件都会拷贝一次hello.txt。
注意一定要写清楚hello.txt文件和hello1.txt文件的路径。
hello.txt有以下内容:hello
hello1.txt初始为空,所以以上代码每运行一次hello1.txt文件内容都会被加上hello。
如果没有true,则每次代码运行hello1.txt都会被覆盖这样hello1.txt的内容只有hello不会随运行次数增加而增加。
用文件名创建FileReader和FileWriter,代码示例:
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class FileWriterTest {
public static void main(String[] args) {
FileReader fr=null;
FileWriter fw=null;
try{
fr=new FileReader("D:\\idea\\loafonajob\\untitled\\src\\hello.txt");
fw=new FileWriter("D:\\idea\\loafonajob\\untitled\\src\\hello1.txt",true);
char[] cbuf=new char[5];
int len;
while((len=fr.read(cbuf))!=-1){
fw.write(cbuf,0,len);
System.out.println(cbuf);
}
}catch(Exception e){
e.printStackTrace();
}finally{
try{
if(fw!=null)
fw.close();
}catch (IOException e){
e.printStackTrace();
}finally {
try{
if(fr!=null)
fr.close();
}catch (IOException e){
e.printStackTrace();
}
}
}
}
}
可以复制我的代码到idea去测试一下,注意文件路径要用自己电脑的文件路径,推荐文件格式为txt文件。idea可以创建文件,但要加上.txt后缀名,读取文件不要为空,写入文件可以为空。
总结:
java中的操作流的基本过程为以下四步:
1.声明流对象的引用变量,赋值为null。
2.在try中完成对输入流和输出流的操作。
3.在catch中对可能抛出的异常进行捕获处理。
4.在finally中关闭输入流和输出流。