FileWriter和FileReader一般成对的出现,它们都是字符流。用法和前面讲的FileInputStream和FileOutputStream一样,只是应用的范围不一样(文件字符流用于纯文本文件的读写比较快速)。
继续将前面的结构图贴一下:
FileReader继承自InputStreamReader
FileWriter继承自OutputStreamReader
Reader是一个抽象类,定义了一系列的方法规范:
下面来看一下范例:
package IO;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
public class testFileReader {
public static void main(String[] args) {
try {
//创建文件输入字符流
FileReader read = new FileReader("F:/test");
//开始读,返回的是读入字符的Ascall码值
int t1 = read.read();
System.out.println(t1);
read.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
以下是FileWriter的使用,方式和FileOutputStream雷同
package IO;
import java.io.FileWriter;
import java.io.IOException;
public interface testFileWriter {
public static void main(String[] args) {
try {
//FileWriter writer = new FileWriter("F:/test1");
FileWriter writer = new FileWriter("F:/test1",true);//追加方式的写入,否则会覆盖文件前面的内容
writer.write("Hello World!");
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
用FileWriter和FileReader实现文本的复制粘贴:
package IO;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class FileReaderAndFileWriter {
public static void main(String[] args) {
try {
//创建输出字符流对象
FileReader reader = new FileReader("F:/test");
//创建输入字符流对象
FileWriter writer = new FileWriter("F:/test4");
//创建存放char数组
char[] c = new char[512];
int temp = 0;
//将字符读入c数组中,当读到空字节的时候返回-1
while((temp=reader.read(c)) !=-1) {
//将c数组中的字符写入输入字符流中
writer.write(c,0,7);
}
//关闭字符流
reader.close();
writer.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}