下面的flush和close随意交换一下就会不能复制文件了
import java.io.FileReader;
import java.io.BufferedReader;
import java.io.FileWriter;
import java.io.BufferedWriter;
import java.io.IOException;
public class Copy
{
      public static void main(String args[])
      {
            try
            {
                 FileReader fr=new FileReader("file1.txt");
                 BufferedReader br=new BufferedReader(fr);
                 FileWriter fw=new FileWriter("file2.txt");
                 BufferedWriter bw=new BufferedWriter(fw);
                 String line=br.readLine();
                 while(line!=null)
                 {
                      bw.write(line);
                      bw.newLine();
                      line=br.readLine();
                 }
                 System.out.println("copy完成");
                 bw.flush();
                 fw.close();
                 br.close();
                 fr.close();
            }
            catch(IOException ie)
            {
                 System.out.println("文件不存在");
            }
      }
}

解决方案 »

  1.   

    flush()说刷新更好些...就是把缓存中的数据写入流中
    close()是释放流资源...如果你流资源都被关闭了,你再flush(),刷新的谁呢?flush()一般是你保证当前资源写入流中才用(不用flush()的话,直到缓存满了才写入流,所以时间不确定),所以一般是你需要的东西都write()完了后面就跟个flush();close()肯定是你确定此资源不再被使用了才关.也就是最后才使用
      

  2.   

    bw.flush();与它fw.close();交换也会么。是不是由于线程的原因,即读线程与写线程的释放资源的先后顺序严格规定了
      

  3.   

    也就是说程序执行的flush的时候。才被真正写入到了文件?
      

  4.   


    因为LZ写的是
    bw=new BufferedWriter(fw); 
    所以bw、fw操作的是同一个流资源..故相互有影响。
    是的...当缓存满了时也会自动做一遍写入...close()时也会自动做一遍