BufferedWriter如何在java中工作

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语句,它为您执行此操作).