码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2015-06-12 19:04:09      阅读:135      评论:0      收藏:0      [点我收藏+]

标签:

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

 

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

标签:

原文地址:http://www.cnblogs.com/cxryangguang/p/4572042.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!