Java 为什么不';文件中没有所有条目吗?
在下面的程序中,循环迭代1000次,我使用FileWriter将所有条目写入文件,但不幸的是,程序最终只在文件中写入510个条目(有时415个,有时692个,总是小于1000个),但循环迭代1000次Java 为什么不';文件中没有所有条目吗?,java,file-io,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<Str
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) ;
}
}
}
import java.io.*;
导入java.util.*;
公共类DemoWriter{
公共静态void main(字符串[]args)引发异常{
List receiverList=新建ArrayList();
收款人名单。添加(“abc@gmail.com") ;
收款人名单。添加(“pqr@ibibo.com") ;
收款人名单。添加(“xyz@gmail.com") ;
FileWriter fw=新的FileWriter(“a.txt”);
BufferedWriter bw=新的BufferedWriter(fw);
int size=receiverList.size();
字符串str;
整数计数=0;
对于(int i=1;i您没有关闭和刷新写入程序。如果在代码末尾对写入程序调用close()
方法,缓冲区将被刷新,写入程序将被关闭
正如Hank Gay在评论中指出的那样,close()
方法可能会抛出异常(我相信是IOException
)。这意味着您必须将要关闭的调用包装在一个try
/catch
块中。但是,我看到您的main
方法抛出异常
-这不是最佳做法,但它将防止您在此特定实例中需要try
/catch
块。是否需要关闭BufferedWriter和FileWriter对象?可能会留下不完整的文件。只需添加
bw.flush();
bw.close();
实际上,在方法结束时,您应该始终关闭资源以刷新所有内容并释放资源。显式刷新不是必需的,因为它通常在关闭过程中隐式完成。只需在try-catch-finally块的finally块内调用即可
另外,对close()
的调用应该在finally
块中。方法名称是小写的,我相信(需要仔细检查文档),但是调用close也会刷新缓冲区……我不确定。在C中肯定是这样。文档中说“public void close())抛出IOException\\Close流。“这是Java,不是C#。但是,这可能取决于编写器的类型。我知道“这是Java”,thx。这是关于这个特定编写器的Java文档,好吗?你不想调用Close()在try-catch块的最后一部分,它会抛出一个异常。那么?只需捕获它并进一步忽略它,或者出于日志记录的目的对它执行e.printStackTrace()。它当然需要在最后一块中执行,因为否则会泄漏资源。bw.close()应该传递close()。