请问FileWriter类的close方法会自动调用flush方法么
  小弟写下面程序时除了问题,请诸位高手指教 先谢谢啦!/*
功能:
利用FileReader 读取一个文件的内容
再利用FileWriter 将读取的内容写入另一文件中
即 利用FileReader 和 FileWriter 完成文件的复制 本程序的问题是:
如果不调用FileWriter的close方法,则就会写入失败,
FileWriter类的close方法会自动调用flush方法么?
具体参见下面程序
*/import java.io.*;public class Test1
{
//统计name所代表的文件中的字符的个数!
public static int CountCharacterFile(String name)
{
int cnt = 0; try
{
//int cnt = 0;
int ch;
FileReader fr = new FileReader(name);
while (-1 != (ch=fr.read()))
{
cnt++;
}
fr.close();
}
catch (FileNotFoundException e)
{
System.out.println("文件没有找到!");
}
catch (IOException e)
{
System.out.println("文件读取失败!");
} return cnt;
}
public static void main(String[] args)
{
FileReader fr = null;
FileWriter fw = null;
int cnt = 0; try
{
fr = new FileReader("C:\\Documents and Settings\\others\\桌面\\java\\TestFileReader1.java");
fw = new FileWriter("d:/share/java/dabaichi.java");
int ch; while (-1 != (ch=fr.read()))
{
//System.out.print((char)ch);
fw.write(ch);
cnt++;
}
System.out.printf("总共读取了%d个字节的数据\n", cnt);

//fr.close();
//fw.close();  //55行
}
catch (FileNotFoundException e)
{
System.out.println("找不到文件!");
System.exit(-1);
}
catch (IOException e)
{
System.out.println("文件读取失败!");
System.exit(-1);
} System.out.println("复制到的文件中的字符个数是: " + CountCharacterFile("d:/share/java/dabaichi.java") );
}
}
/*
如果55行不被注释掉,则在JDK 1.6中的运行结果是:
----------------------------------
总共读取了605个字节的数据
复制到的文件中的字符个数是: 605
----------------------------------
打开d:/share/java/dabaichi.java文件 发现复制成功
如果55行被注释掉,则在JDK 1.6中的运行结果是:
----------------------------
总共读取了605个字节的数据
复制到的文件中的字符个数是: 0
----------------------------
打开d:/share/java/dabaichi.java文件 发现文件是空的
*/

解决方案 »

  1.   

    再补一问题:  如果不调用FileWriter的close方法,也不调用flus方法,当关闭整个程序时,是不是FileWriter类对象就不会自动调用close方法和flush方法????
      

  2.   

    写方法,必须close(),所谓flush是为了强制刷新。其实如果你写的东西多了,系统会自动刷新的。而且,close会自动把没有flush的东西写入的。
      

  3.   


    答:我想楼主不应该问这个问题.我的意思是:写程序有一个好习惯,比什么都好.因此:楼主似乎应该自己主动在代码中写上:
    out.flush();
    out.close();这是好的代码习惯,为何不这样去写呢?关于你的问题,我也没法回答,因为我没有看源代码,也确实不知道.以上仅供你参考.
      

  4.   

    除了System.in、System.out和System.err不需要显示调用close方法,其它的io流都要显示的调用close方法;至于flush,通常情况下不需要调用,io流在close中自动调用,只有在必要的情况中,才由你来显示调用flush。更正,这不是编程习惯的问题。
      

  5.   

    out.flush(); 
    out.close(); 
    必须得写的
      

  6.   

    out.flush(); 将缓冲的内容写出来。
    两者你写一个就可以立了》
      

  7.   

    Note close calls flush, so calling both is redundant. I would always call close. It may make sense to call close in a finally clause.