import java.io.*;
public class FileWriterTest {
public static void main(String[] args) {
try{
FileWriter fw = new FileWriter("e:\\poem.txt");
{ fw.write("锦瑟 - 李商隐\r\n");
fw.write("锦瑟无端五十弦,一弦一柱思华年。\r\n");
fw.write("庄生晓梦迷蝴蝶,望帝春心托杜鹃。\r\n");
fw.write("沧海月明珠有泪,蓝田日暖玉生烟。\r\n");
fw.write("此情可待成追忆,只是当时已惘然。\r\n");
}
}
catch(IOException ioe){
ioe.printStackTrace();
}
}}
编译没错误,但是编译后产生的poem.txt里什么都没有,是什么问题?
还有其中的这段程序为什么要加花括号,不加不行么?
{ fw.write("锦瑟 - 李商隐\r\n");
fw.write("锦瑟无端五十弦,一弦一柱思华年。\r\n");
fw.write("庄生晓梦迷蝴蝶,望帝春心托杜鹃。\r\n");
fw.write("沧海月明珠有泪,蓝田日暖玉生烟。\r\n");
fw.write("此情可待成追忆,只是当时已惘然。\r\n");
}

解决方案 »

  1.   

    你这样写,文件里面只能看到 此情可待成追忆,只是当时已惘然 这一句,前面的都被覆盖了..
    写完后 fw.close();
      

  2.   

    主要问题是没有close(),那么所有数据可能都留在 输出缓冲区 中,并没有正式的写入文件。
    楼主尽量规范点:
    FileWriter fw = null;
    try{
      fw = new FileWriter("e:\\poem.txt");
      fw.write("锦瑟 - 李商隐\r\n");
      fw.write("锦瑟无端五十弦,一弦一柱思华年。\r\n");
      fw.write("庄生晓梦迷蝴蝶,望帝春心托杜鹃。\r\n");
      fw.write("沧海月明珠有泪,蓝田日暖玉生烟。\r\n");
      fw.write("此情可待成追忆,只是当时已惘然。\r\n");
      fw.flush(); //重要数据写完后,可以强制要求flush缓冲区
    } catch(IOException ioe){
      ioe.printStackTrace();
    } finally {
      if (fw!=null) fw.close(); // 在finally中确保释放各种资源
    }
      

  3.   

    其实只要有个刷新就行了,不用close()方法。写法如下:
    import java.io.File;
    import java.io.FileWriter;
    import java.io.IOException;/**
     *
     * @author Administrator
     */
    public class FileTest {
        public static void main(String args[]) throws IOException {
            FileWriter fw = new FileWriter(new File("D:/a.txt"));
            fw.write("锦瑟 - 李商隐\r\n");
            fw.write("锦瑟无端五十弦,一弦一柱思华年。\r\n");
            fw.write("庄生晓梦迷蝴蝶,望帝春心托杜鹃。\r\n");
            fw.write("沧海月明珠有泪,蓝田日暖玉生烟。\r\n");
            fw.write("此情可待成追忆,只是当时已惘然。\r\n");
            fw.flush();
            //fw.close();
        }
    }不过楼主添加上fw.close();这句会更好更规范的
      

  4.   

    没有close的话,只是在内存里,没写到硬盘。所以你看不到
      

  5.   

    花括号问题?
    trycatch的花括号必须,这是捕获异常所需要的;
    而你在fw.write()前后的花括号可以不需要,我2楼的例子里面就没有。
    关于为什么一片空白,我在2楼已经解释过了,你大概还没理解。为了提升系统IO性能,而不是你写一个字节操作系统就去写一次磁盘,所以IO都是有缓冲区的,而且这个缓冲区往往有几K到几百K不等;那么这就意味着你可能写了很多东西,但是没有要求缓冲区刷新到磁盘(flush),那么这个缓冲区内容最终就会被丢弃。另外,close()函数被调用时,会自动触发flush()动作,所以你没有close()其实是本质问题。
      

  6.   

    花括号问题?
    trycatch的花括号必须,这是捕获异常所需要的;
    而你在fw.write()前后的花括号可以不需要,我2楼的例子里面就没有。
    关于为什么一片空白,我在2楼已经解释过了,你大概还没理解。为了提升系统IO性能,而不是你写一个字节操作系统就去写一次磁盘,所以IO都是有缓冲区的,而且这个缓冲区往往有几K到几百K不等;那么这就意味着你可能写了很多东西,但是没有要求缓冲区刷新到磁盘(flush),那么这个缓冲区内容最终就会被丢弃。另外,close()函数被调用时,会自动触发flush()动作,所以你没有close()其实是本质问题。