在下面的程序中,循环迭代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。 干杯:)
答案 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();
到方法的最后