为什么文件中没有所有条目?

时间:2009-11-02 18:09:34

标签: java file-io

在下面的程序中,循环迭代1000次,我使用FileWriter在文件中写入所有条目,但不幸的是程序最终只写入510(有时是415,有时是692,总是少于1000)条目文件,但循环迭代1000次。

import java.io.* ;
import java.util.*;

public class DemoWriter {

    public static void main(String[] args) throws Exception {

        List<String> receiverList = new ArrayList<String>() ;
        receiverList.add("abc@gmail.com") ;
        receiverList.add("pqr@ibibo.com") ;
        receiverList.add("xyz@gmail.com") ;

        FileWriter fw = new FileWriter("a.txt") ;
        BufferedWriter bw = new BufferedWriter(fw) ;

        int size = receiverList.size() ;

        String str ;
        int count = 0 ;
        for(int i = 1 ; i <= 1000 ; ++i){
            str = receiverList.get( (int) (Math.random() * size) ) + "\n" ;
            bw.write(++count + ".> " + str) ;
            System.out.print(count + ".> " + str) ;
        }
    }
}

这是因为文件大小还是别的???


Thnx对这里所有好人的快速反应。我已经纠正了我的代码(我只是忘了关闭流,现在代码工作完美)。众所周知,我需要关闭流,但我接受BalusC,因为他是第一个回复的人。

很高兴来到BalusC。 干杯:)

4 个答案:

答案 0 :(得分:9)

你没有关闭和冲洗你的作家。如果在代码末尾的编写器上调用close()方法,则刷新缓冲区并关闭编写器。

正如Hank Gay在评论中指出的那样,close()方法可能会抛出异常(IOException,我相信)。这意味着您必须将调用封装在try / catch块中。但是,我看到您的main方法抛出Exception - 这不是最佳做法,但它会阻止您在此特定实例中需要try / catch

答案 1 :(得分:5)

实际上,您应该始终关闭资源以清除所有内容并释放资源。没有必要明确刷新,因为它通常在结束时隐式完成。只需在try-catch-finally块的 finally 块内调用Closeable#close(),就可以了。

了解详情Java IO tutorial

答案 2 :(得分:0)

您是否需要关闭BufferedWriter和FileWriter对象?这可能会留下不完整的文件。

答案 3 :(得分:0)

添加

    bw.flush();
    bw.close();

到方法的最后