学习了IO流后,了解其IO体系:
字符流:
Reader:输入流 读取 进入内存
Writer:输出流 写入 进硬盘
字节流:
InputStream:输入流 读取 进内存
OutputStream:输出流 写入 进硬盘
下面通过字符流的输入流(FileReader)以及输出流(FileWriter)模拟系统中的复制粘贴功能:如将D盘下的1.txt复制粘贴到C盘中。
思路:
- 确定源文件 d:/1.txt
- 确定目的文件 c:/1.txt
- 边读边写
- 释放资源
注意:
输入流中的read(数组)函数的返回值为int类型,返回的是覆盖数组中的元素长度,读取结束标志是返回值为-1;
每次写入结束后要使用flush()函数进行刷新缓存。
代码:
首先用基本的输入输出流实现:
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class Test1 {
public static void main(String[] args){
//1.确定源文件 d:/1.txt
FileReader fr=null;
FileWriter fw=null;
try {
fr=new FileReader("d:/1.txt");
//2.确定目标文件 c:/1.txt
fw=new FileWriter("c:/1.txt");
//3.边读边写
char[] cbuf=new char[3];
int len=0; //覆盖的长度
while((len=fr.read(cbuf))!=-1){
fw.write(cbuf,0,len); //将cbuf数组中从下标0的位置开始写入c:/1.txt,写入数组中的len个元素。
fw.flush();
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
finally {
//4.释放资源
try {
fr.close();
fw.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
使用缓冲区(提高效率)实现:
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
public class Test2 {
public static void main(String[] args) throws Exception {
//1.确定源文件
//FileReader fr=new FileReader("d:/1.txt");
//提高效率
//BufferedReader br=new BufferedReader(fr);
BufferedReader br=new BufferedReader(new FileReader("d:/1.txt"));
//2.确定目的文件
BufferedWriter bw=new BufferedWriter(new FileWriter("d:/poet.txt"));
//3.边读边写
String str=null;
while((str=br.readLine())!=null){
bw.write(str);
bw.newLine();
bw.flush();
}
//4.释放资源
br.close();
bw.close();
}
}