BufferedWriter写入文件注意事项

对于文本文件,使用BufferedReader,BufferedWriter进行读写效率更高,原因是使用了缓存区,其工作流程是:先把文本内容读写到缓存区,缓存区满了,自动把缓存区中的内容读写到文件.

    问题:

             如果读写完的同时缓冲区刚好装满,那么缓冲区会把里面的数据朝目标文件自动进行读或写,这种时候你直接调用close()方法关闭流是不会出现问题 , 但是如果文件在读写完成时,缓冲区没有装满,就直接调用close()方法,这个时候装在缓冲区的数据就不会自动的朝目标文件进行读或写,造成缓冲区中的这部分数据丢失.

  解决方法:

       在close()之前先调用flush()方法, 手动使缓冲区数据读写到目标文件
 

eg:

@Test
public void test5(){
    BufferedWriter bufferedWriter = null;
    BufferedReader bufferedReader = null;
    try {
        bufferedReader = new BufferedReader(new InputStreamReader(new FileInputStream("G://reader.txt"),"GBK"));
        //写入流,设置缓存区大小为1024K
        bufferedWriter = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("G://writer.txt"),"UTF-8"),1024);
        String line;
        while ((line = bufferedReader.readLine()) != null) {
            bufferedWriter.write(line);
            bufferedWriter.newLine();
        }
    }catch (Exception e){
        log.error("异常:{}",e);
    }finally {
        if (bufferedWriter != null) {
            try {
                //刷新缓存区
                bufferedWriter.flush();
                bufferedWriter.close();
            } catch (IOException e) {
                log.error("关闭输出流异常:{}", e);
            }
        }
        if (bufferedReader != null) {
            try {
                bufferedReader.close();
            } catch (IOException e) {
                log.error("关闭读取流异常:{}", e);
            }
        }
    }
    log.info("安全结束");
}

 

你可能感兴趣的:(java)