您的位置:首页 > Web前端

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

2015-06-12 16:43 381 查看
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: