我经常将文本输出到文件中。我想知道一件事:怎么办BufferedWriter
work?
当我打电话时它会在文件中写入文本吗writer.write(text)
?
如果不写文本,我需要使用flush函数来写数据吗?
例如:
File file = new File("statistics.txt");
if (!file.exists()) {
file.createNewFile();
}
else
{
file.delete();
file.createNewFile();
}
FileWriter fileWritter = new FileWriter(file.getAbsoluteFile(),true);
BufferedWriter bufferWritter = new BufferedWriter(fileWritter);
Iterator<Map.Entry<String,Token>> it = listofTakenPairMap.entrySet().iterator();
int isim_isim=0;
int isim_fiil=0;
int zarf_fiil=0;
while (it.hasNext()) {
@SuppressWarnings("rawtypes")
Map.Entry pairs = (Map.Entry)it.next();
Token token=(Token)pairs.getValue();
String str=pairs.getKey()+ " = " +token.getCount();
if(token.getTypeOfPairofToken()==0){//isim-isim
isim_isim+=token.getCount();
}
else if(token.getTypeOfPairofToken()==1){
isim_fiil+=token.getCount();
}
else{ //zarf-fiil
zarf_fiil+=token.getCount();
}
System.out.println(str);
bufferWritter.write(str);
bufferWritter.newLine();
//it.remove(); // avoids a ConcurrentModificationException
}
bufferWritter.newLine();
bufferWritter.write("##############################");
bufferWritter.newLine();
bufferWritter.write("$isim_isim sayisi :"+isim_isim+"$");
bufferWritter.newLine();
bufferWritter.write("$isim_fiil sayisi :"+isim_fiil+"$");
bufferWritter.newLine();
bufferWritter.write("$zarf_fiil sayisi :"+zarf_fiil+"$");
bufferWritter.newLine();
bufferWritter.write("##############################");
bufferWritter.flush();
bufferWritter.close();
如果 while 循环中发生错误,文件将被关闭而不写入数据。如果我使用flush
while循环中的函数,那我为什么要使用BufferedWriter
?如果我错了,请纠正我。
根据定义,缓冲写入器会缓冲数据,并且仅在内存足够时才写入数据,以避免与文件系统进行过多的往返。
如果您正确处理异常,并像往常一样在finally块中关闭流,缓冲区将被刷新到磁盘,并且到目前为止写入缓冲写入器的所有内容都将写入磁盘(当然,除非异常正是由于写入磁盘的错误引起的)。
因此,解决方案不是每次写入时都刷新,因为这会破坏缓冲写入器的目的。解决方案是在finally 块中关闭(或者使用Java 7 trye-with-resources 语句,它会为您完成此操作)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)