JavaSE: FileWriter类 & FileReader类
FileWriter 类
1. 基本概念
java.io.FileWriter类:用于将文本内容写入到文本文件
2. 常用的方法
<1>FileWriter(String fileName) | 根据参数指定的文件名构造对象 |
<2>FileWriter(String fileName, boolean append) | 以追加的方式,根据参数指定的文件名来构造对象 |
<3>void write(int c) | 写入单个字符 |
<4>void write(char[] cbuf) | 将cbuf.length个字符从指定字符数组写入此文件输出流中 |
<5>void flush() | 刷新流 |
<6>void close() | 关闭流对象并释放有关的资源 |
3. 代码示例
class FileWriterTest{
main(){
// 选中代码后可以使用 ctrl + alt + t 来生成异常的捕获代码等
FileWriter fw = null;
try{
// 1. 构造FileWrite类型的对象与d:/a.txt文件关联
若文件不存在:该流回自动创建新的空文件
若文件存在:该流会清空文件中的原有内容
fw = new FileWriter("d:/a.txt");
// 以追加的方式创建对象,去关联文件
// 若文件不存在:自动创建新的空文件
// 若文件存在:保留原有的数据内容
// fw = new FileWriter("d:/a.txt", true);
// 2. 通过流对象写入数据内容,每当写入一个字符后,文件中的读写位置向后移动一位
fw.write('a');
// 准备一个字符数组
char[] cArr = new char[]{'h','e','l','l','o'};
// 将字符数组中的一部分内容,写入进去
fw.write(cArr,1,3); // 'e','l','l'
// 将整个字符数组写进去
fw.write(cArr); // 'h','e','l','l','o'
// 刷新流
fw.flush();
println("写入数据成功!");
}catch(IOException e){
e.printStackTrace();
}finally{
// 3. 关闭流对象,并释放有关的资源
if (null != fw) {
try{
fw.close();
}catch (IOException e){
e.printStackTrace();
}
}
}
}
}
FileReader 类
1. 基本概念
java.io.FileReader类:用于从文本文件读取文本数据内容
2. 常用的方法
<1>FileReader(String fileName) | 根据参数指定的文件名构造对象 |
<2>int read() | 读取单个字符的数据并返回,返回-1表示读取到末尾 |
<3>int read(char[] cbuf, int offset,int length) | 从输入流中将最多len个字符的数据,读入一个字符数组中(从下标为offset的位置开始),并返回读取到的字符个数,返回-1表示读取到末尾 |
<4>int read(char[] cbuf) |
从此输入流中,将最多cbuf.length 个字符的数据读入字符数组中, 返回读取到的字符个数,返回-1表示读取到末尾 |
<5>void close() | 关闭流对象并释放有关的资源 |
3. 代码示例
class FileReaderTest {
main(){
FileReader fr = null;
try{
// 1. 构造FileReader类型的对象,与d:/a.txt文件关联
// fr = new FileReader("d:/a.txt");
fr = new FileReader("d:/b.txt");
// 2. 获取数据内容并打印
/*
int res = fr.read();
println("读取到的单个字符是:" + (char)res); // 'a'
*/
int res = 0;
while( (res = fr.read()) != -1){
println("读取到的单个字符是:" + (char)res + ",对应的编号是:" + res);
}
// 准备一个字符数组,来保存读取到的数据内容
// char[] cArr = new char[5];
// 期望读满字符数组中的一部分空间,也就是,读取3个字符,放入数组cArr中,下标从1开始的位置上
/*
int res = fr.read(cArr,1,3);
println("实际读取到的字符个数是:" + res); // 3
for (char cv : cArr){
println("读取到的单个字符是:" + (char)cv); // 空 a e l 空
}
*/
// 期望读满整个字符数组
/*
int res = fr.read(cArr);
println("实际读到的字符个数是:" + res); // 5
for (char cv : cArr) {
println("读取到的单个字符是:" + (char)cv); // a e l l h
}
*/
}catch (IOException e){
e.printStackTrace();
}finally{
// 3. 关闭流对象并释放有关的资源
if (null != fr){
try{
fr.close();
} catch(IOException e){
e.printStackTrace();
}
}
}
}
}
4. FileReader 类 & FileWriter 类 代码示例
文件拷贝(两个文本文件)
class FileCharCopyTest{
main(){
FileReader fr = null;
FileWriter fw = null;
try{
// 1. 创建FileReader类型的对象,与d:/a.txt 文件关联
fr = new FileReader("d:/a.txt");
// fr = new FileReader("d:/03 IO流的框架图.png");
// 2. 创建FileWriter类型的对象,与d:/b.txt文件关联
fw = new FileWriter("d:/b.txt");
// fw = new FileWriter("d:/IO流的框架图.png"); 拷贝图片文件失败!!!
// 3. 不断地从输入流中,读取数据内容,并写入到输出流中
println("正在玩命地拷贝...");
int res = 0;
while ( ((res = fr.read()) != -1) ) {
fw.write(res);
}
println("文件拷贝成功!");
}catch(IOException e){
e.printStackTrace();
}finally{
// 4. 关闭流对象,并释放有关的资源
if (null != fw){
try{
fw.close();
} catch (IOException e){
e.printStackTrace();
}
}
if (null != fr){
try{
fr.close();
} catch (IOException e){
e.printStackTrace();
}
}
}
}
}