文件逐行写入BufferedWriter的刷新flush()方法

FileOutputStream 继承 OutputStream 并不提供flush方法的重写
所以无论内容多少write都会将二进制流直接传递给底层操作系统 flush无效果
而Buffered系列的输入输出流函数单从Buffered这个单词就可以看出他们是使用缓冲区的
应用程序每次IO都要和设备进行通信,效率很低,因此缓冲区为了提高效率,当写入设备时,先写入缓冲区,等到缓冲区有足够多的数据时,就整体写入设备
楼主flush()的那行可以不写 而是把close()拿上去,flush会刷新缓冲区,而close方法内部是会先调用flush方法再执行关闭方法的,异曲同工。

package src.readFile;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Scanner;

public class ReadFile {
    public static void main(String[] args) {
        try {
            //已使用的最大卡号
            int MAXCARDNO = 497895;
            //int MAXCARDNO = 10;
            //已使用卡号最大条数
            int COUNTCARDNO = 119039;
            //int COUNTCARDNO = 3;
            Scanner in = new Scanner(new File("d:"+File.separator+"cardno.txt"));
            //初始化读入文件数据个数
            long[] inputArr = new long[COUNTCARDNO];
            int i = 0;

            System.out.println("读入文件内容:");
            while (in.hasNextLine()) {
                String str = in.nextLine();
                str = str.substring(5);
                Long intTemp = Long.parseLong(str.trim());
                //splitt(str);
//                System.out.println(intTemp);
                inputArr[i++]=intTemp;
            } 

            String[] outputArr = new String[60000];
            String cardNoTemp = "";
            //未使用的卡号循环记录
            int abak = 1;
            //未使用的卡号数组下标记录
            int outI = 0;

            //输出文件生成
            String filePath1 = "D:"+File.separator+"output.txt";
            try {
                FileWriter fw = new FileWriter(filePath1);
                BufferedWriter bw = new BufferedWriter(fw);

                System.out.println("未使用卡号如下:");
                for (int inputI=0;inputI<COUNTCARDNO;inputI++) {
                    for (int a=abak; a<=MAXCARDNO; a++) {
                           if (a==inputArr[inputI]) {
                               abak=++a;
                            break;
                        } else {
                            cardNoTemp = "04003" + codeAddZero(String.valueOf(a), 9);
                            outputArr[outI++] = cardNoTemp;
                            bw.write(cardNoTemp);
                            bw.newLine();
                            System.out.println("没有使用的cardNo:" + cardNoTemp);
                        }
                    }
                }
                bw.flush();
                bw.close();
                fw.close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
    } 

    /**
     * 卡号自动前补零操作
     * @param code
     * @param len
     * @return
     */
    public static String codeAddZero(String code, int len){
        String strCode = code;
        while (strCode.length() < len) {
            strCode = "0" + strCode;
         }
        return strCode;
     }
}

ReadFile

时间: 2024-12-04 19:54:18

文件逐行写入BufferedWriter的刷新flush()方法的相关文章

Java BufferedWriter的flush()方法简介

1.BufferedWriter简介 BufferedWriter是缓冲输入流,意思是调用BufferedWriter的write方法时候.数据是先写入到缓冲区里,并没有直接写入到目的文件里. 2.flush()方法简介 调用BufferedWriter的flush()方法时,会刷新一下该缓冲流,也就是把数据写入到目标文件里.或者可以调用BufferedWriter的close()方法,该方法会在关闭该输入流之前先刷新一下该缓冲流.也会把数据写入到目标文件里. 3.坑 如果在未flush或者cl

python文件写中的f.flush()方法

f = open("input.txt", "w") f.write("aaaaaa") f.flush() #强行把缓冲区中的内容放到磁盘中 s = input("请输入回车键") f.close() 当没有输入回车键时,数据也依然写入到文件中,如果没有flush()方法的话,那么只有按下回车键才会把数据保存到文件中 输出结果: [email protected]:~/zengsf$ python3 exercise822.

WIN10文件无法自动刷新问题解决方法

Window10系统有时候会遇到以下类似的问题 1.文件删除后,图标还在,无法自动刷新屏幕,按F5或右键菜单刷新后才消失 2.文件粘贴后,不显示,刷新后才显示 3.回收站清理后,文件图标仍显示有垃圾 解决方法: 1.打开启动注册表编辑器,展开HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Update如果没有Update项,右击Control选择新建项目,命名为Update 2.右击Update项目,新建DWORD值(32位),命名为Upd

StringBuffer中的flush()方法作用

在java API1.6对flush()方法的介绍如下: 方法摘要  void close()           关闭此流,但要先刷新它.  void flush()           刷新该流的缓冲.  void newLine()           写入一个行分隔符.  void write(char[] cbuf, int off, int len)           写入字符数组的某一部分.  void write(int c)           写入单个字符.  void w

IO流-文件的写入和读取

1.文件写入 类: FileWriter继承自Writer(字符流基类之一,另外一个为Reader) 方法: writer(参数); 根据参数可以写入字符.字符数组.字符数组中的一部分.整型.字符串.字符串中的一部分,抛IOException flush(); 刷新内存,把内存中的字符流写入文件 close(); 刷新内存并关闭字符输入流,抛出IOException import java.io.*; class Test { public static void main(String[] a

Google多线程面试题: 4个线程向4个文件里写入数据, 每个线程只能写一个值

By Long Luo 个人博客链接 最近在学习Java多线程时,遇到了一个下面的笔试题,题目如下: 编写一个程序,程序会启动4个线程,向4个文件A,B,C,D里写入数据,每个线程只能写一个值. 线程A:只写A 线程B:只写B 线程C:只写C 线程D:只写D 4个文件A,B,C,D. 程序运行起来,4个文件的写入结果如下: A:ABCDABCD... B:BCDABCDA... C:CDABCDAB... D:DABCDABC... 网上搜索了下,好像还是一个Google笔试题,这个问题涉及到的

CSV文件的写入(按行写入)

# -*- coding: utf-8 -*- #python 27 #xiaodeng #CSV文件的写入(按行写入) import csv #csv文件,是一种常用的文本格式,用以存储表格数据,很多程序在处理数据时会遇到csv格式文件 #csv文件的写入(按行写入) def getSortedValues(row): sortedValues=[]#初始化为空list keys=row.keys() keys.sort() for key in keys: sortedValues.appe

Java 输出流中的flush方法

转自:http://blog.csdn.net/jiyangsb/article/details/50984440 java中的IO流中的输出流一般都有flush这个操作,这个操作的作用是强制将缓存中的输出流(字节流,字符流等)强制输出. 为什么会有这么个方法啊? 因为输出流在进行输出时,比如像某个文件中写入内容,其实是先将输出流写入到缓冲区,当缓冲区写满后才将缓冲区的内容输出到文件中.但是当主机完成输出流的输出后,有可能缓冲区这个时候还没有被填满,这样的话,就会一直等待主机发送内容,这时候,就

关于java中输出流flush()方法

在java开发中,有时我们会进行流的操作,所以可能会经常遇到这样一段代码 out.flush(); out.close(); 有时我们只是大概看懂这些,却不知道其中的原理性东西,下面就来理解一下: flush()这个函数是清空的意思,用于清空缓冲区的数据流,进行流的操作时,数据先被读到内存中,然后再用数据写到文件中,那么当你数据读完时,我们如果这时调用close()方法关闭读写流,这时就可能造成数据丢失,为什么呢,因为,读入数据完成时不代表写入数据完成,一部分数据可能会留在缓存区中,为了理解这个