本帖最后由 徐小骥 于 2012-8-6 16:44 编辑
- 代码装不下被清了一部分。。。白修改了。。。现在直接发在内容中
复制代码 import java.io.*;
public class FileCtrlC {
private static FileReader fr=null;//声明reader流并初始化
private static FileWriter fw=null;//声明writer流并初始化
public FileCtrlC(FileReader fr){//外部调用方法
this.fr=fr;
}
public static void main(String[] args) throws IOException{
FileCtrlC.fr=new FileReader("f:\\IOtest1.txt");
copy1(fr);//调用方法copy1(FileReader fr)
FileCtrlC.fr=new FileReader("f:\\IOtest1.txt");//为什么这里必须再给fr赋值才能调用调用方法copy2(FileReader fr)?
copy2(fr);//调用方法copy2(FileReader fr)
//copy2(copy1(fr) ) ;// copy2调用copy1返回的内容
}
//public static FileReader copy1(FileReader fr) throws IOException //带返回内容的copy方法
public static void copy1(FileReader fr) throws IOException{//拷贝文件方法2
fw=new FileWriter("f:\\IOtest2.txt",true);//实例化要写入的文件对象,标记为可续写
char[] ch=new char[1024];
int num=0;
while((num=fr.read(ch))!=-1){
fw.write(ch, 0, num);
fw.flush();
}
close(fr,fw);//调用close方法
}
public static void copy2(FileReader fr){//拷贝文件方法2
try {
fw=new FileWriter("f:\\IOtest3.txt",true);
int num=0;
while((num=fr.read())!=-1){
fw.write(num);
fw.flush();
}
} catch (IOException e) {
throw new RuntimeException("读写失败");
}finally{
close(fr,fw);//调用close方法
}
//return fr;// FileReader copy1 ()返回的内容
}
private static void close(FileReader fr,FileWriter fw){//关闭流的方法
try {
if(fr!=null){
fr.close();
}
} catch (IOException e) {
throw new RuntimeException("Reader流关闭失败");
}finally{
try {
if(fw!=null){
fw.close();
}
} catch (IOException e) {
throw new RuntimeException("Writer流关闭失败");
}
}
}
}
要拷贝的文件被copy1处理后,为什么在调用copy2时必须再赋值才能完成操作?是因为 被copy1处理后fr就被垃圾机制回收了?即使修改copy1的代码在最后return一个fr,再从copy2调用copy1,copy2运行也会报错,是因为fr被writer后就被释放了? |