IO流中对文件的操作有很多,现在总结在IO流中对文件复制的操作:
1.如果被复制文件是文本文件,则可以使用字符流操作,也可以使用字节流操作
2.如果被复制文件是非文本文件,只能通过字节流复制
现举例复制两个文本文档:使用专用于操作文本的字符流实现
方法一:一次复制一个字节
public void method1() throws IOException{
FileReader fr = new FileReader(new File("a.txt"));
FileWriter fw = new FileWriter(new File("b.txt"));
// 一次读取一个字符
int ch;
while ((ch=fr.read())!=-1) {
fw.write((char)ch);
fw.flush(); //刷新到指定文件中
}
// 关闭流资源
fr.close();
fw.close();
}
方法二:一次读取一个字符数组
public void method2() throws IOException{
FileReader fr = new FileReader(new File("a.txt"));
FileWriter fw = new FileWriter(new File("b.txt"));
// 一次读取一个字符数组
int len;
char [] ch = new char [1024];
while ((len=fr.read(ch))!=-1) {
fw.write(ch,0,len);
fw.flush(); //刷新到指定文件中
}
// 关闭流资源
fr.close();
fw.close();
}
方法三:使用高效字符流一次读取一个字符
public void method3() throws IOException{
BufferedReader br = new BufferedReader(new FileReader("a.txt"));
BufferedWriter bw = new BufferedWriter(new FileWriter("d.txt"));
// 使用高效字符流一次读取一个字符
int ch;
while ((ch=br.read())!=-1) {
bw.write(ch);
bw.flush(); //刷新到指定文件中
}
// 关闭流资源
bw.close();
br.close();
}
方法四:使用高效字符流一次读取一个字符数组
public void method4() throws IOException{
BufferedReader br = new BufferedReader(new FileReader("a.txt"));
BufferedWriter bw = new BufferedWriter(new FileWriter("d.txt"));
// 使用高效字符流一次读取一个字符数组
int len;
char [] ch = new char [1024];
while ((len=br.read(ch))!=-1) {
bw.write(ch,0,len);
bw.flush(); //刷新到指定文件中
}
// 关闭流资源
bw.close();
br.close();
}
方法五:使用高效字符流一次读取一行
public void method5() throws IOException{
BufferedReader br = new BufferedReader(new FileReader("a.txt"));
BufferedWriter bw = new BufferedWriter(new FileWriter("d.txt"));
// 使用高效字符流一次读取一行
String s;
while ((s=br.readLine())!=null) {
bw.write(s);
bw.newLine(); // 换行
bw.flush(); //刷新到指定文件中
}
// 关闭流资源
bw.close();
br.close();
}
总结:上诉的复制文档的动作,除了第五种方式是字符流特有的方法(读取一行)外,同理可以使用字节流的操作完成