这个问题在这里已经有答案了:
bufferedwriter未将所有内容写入其输出文件(9个答案)
6年前关门了。
在下面的程序中,loop正在迭代1000次,我正在使用filewriter写入文件中的所有条目,但不幸的是,程序最终只在文件中写入510个条目(有时415个,有时692个,总是小于1000个),但loop正在迭代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) ;
}
}
}
这是因为文件大小还是其他原因???
谢谢你对这里所有好人的快速React。我已经纠正了我的代码(我只是忘记关闭流,现在代码工作得很好)。正如所有人指出的,我需要关闭这条小溪,但我接受巴卢斯克,因为他是第一个回答。
很高兴来到这里。干杯:)
4条答案
按热度按时间j5fpnvbx1#
只需添加
到方法的结尾
z9ju0rcb2#
是否需要关闭bufferedwriter和filewriter对象?会留下不完整的文件。
ckx4rj1h3#
你没有关闭和冲洗你的作家。如果你打电话给
close()
方法在代码结束时,将刷新缓冲区并关闭写入程序。正如汉克·盖伊在评论中指出的那样
close()
方法可能会引发异常(IOException
,我相信)。这意味着您必须在一个小时内结束通话try
/catch
阻止。不过,我看到你的main
方法抛出Exception
-这不是最好的做法,但它会阻止你需要一个try
/catch
在这个特定的示例中阻塞。ygya80vv4#
事实上,您应该始终关闭资源以刷新所有内容并释放资源。显式刷新不是必需的,因为它通常是在关闭时隐式完成的。只要在try-catch-finally块的finally块中调用closeable#close(),就可以了。
在javaio教程中了解更多信息。