Roc*_*Gom 6 java buffer file streamwriter
我经常将文本输出到文件.我想知道:BufferedWriter工作怎么样?
我打电话时是否在文件上写文字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();
Run Code Online (Sandbox Code Playgroud)
如果while循环中发生错误,则文件将在不写入数据的情况下关闭.如果我flush在while循环中使用函数,那我为什么要使用BufferedWriter?如果我错了,请纠正我.
JB *_*zet 13
根据定义,缓冲写入器缓冲数据并仅在内存足够时写入它们,以避免过多的往返文件系统.
如果你正确地处理异常,并且像往常一样在finally块中关闭你的流,缓冲区将被刷新到磁盘,到目前为止写入缓冲的写入器的所有内容都将被写入磁盘(当然除非异常)正是由写入磁盘的错误引起的.
因此,解决方案不是每次写入都要刷新,因为它会破坏缓冲编写器的目的.解决方案是在finally块中关闭(或使用Java 7 trye-with-resources语句,它为您执行此操作).