我把附件内容直接贴出来
ReadWrite.java
/*
* ReadWrite.java
*
* Created on 2006年6月19日, 上午8:30
*
* To change this template, choose Tools | Options and locate the template under
* the Source Creation and Management node. Right-click the template and choose
* Open. You can then make changes to the template in the Source Editor.
*/
import java.io.*;
import java.util.*;
import java.text.*;
import java.text.SimpleDateFormat;
/**
*
* @author Administrator
*/
public class ReadWrite {
/** Creates a new instance of ReadWrite */
String readUrl=null;
String writeUrl=null;
String[] files=null;
public ReadWrite(String readUrl,String writeUrl) {
try{
File read=new File(readUrl);
if(read.isDirectory()) { //判断是否是个目录
files=read.list(new TxtFilter());//参数为真则将文件名写入数组
this.readUrl=read.getAbsolutePath();//获取文件路径
}else{
files=new String[1]; //不是目录就是单个文件
files[0]=read.getName(); //获取文件名
this.readUrl=read.getAbsolutePath();//获取文件路径
}
this.writeUrl=writeUrl; //将函数参数中写入地址传进来
} catch(Exception e) {
System.out.println("输入输出错误!"+e);
}
try{
FileReader inputFile=null;
FileWriter outputFile=null;
String strReadLine=null;//用来存放读出的每一行
StringBuffer str1=new StringBuffer(); //用来存放去掉空格以后的每一行数据
String str2=null;//用来存放每一个字段
String space=" ";//定义26个空格用于补充空格
String oneLine=null;//用来存放第一行的所有字段
String twoLine=null;//用来存放第二行的所有字段
String threeLine=null;//用来存放第三行的所有字段
SimpleDateFormat simpleDate=new SimpleDateFormat("yyyyMMdd");//用来格式化日期
//以下是第一行的一些字段
String one_recid="1";//第一行标志
String bankid="4554816";//交易行号
String siteid="0001";//单位代码
String today=(simpleDate.format(new Date())); //交易日期[yyyymmdd]
String sitenm="dddddddddddddddddddddddddd"; //单位名称
String rev="A"; //当日冲正标志
String endflag="E";//本行结束标志
String eol="\r\n";//回车换行
//以下是第一行将要写进去的内容
oneLine=one_recid +space.substring(0, 7-bankid.length()) +bankid +space.substring(0,4-siteid.length()) +siteid +today +space.substring(0,26-sitenm.length()) +sitenm +rev+endflag+eol;
//以下是第二行的一些字段
String two_recid="2"; //第二行标志
String three_recid="3"; //第三行标志
String NewID="w";
String Endflag="E";
String rccode="101"; /* 代收/代付费用代码 */
String digdep="C"; /* 存款标志 [C] */
int dep=0;//存款总金额
String digwtd="D" ;/* 取款标志 [D] */
int wtd=0;//取款总金额
int acno;//总笔数
String testkey="12345678" ; /* 客户盘标键值 */
//System.out.println(files.length+"前面为文件个数");
StringTokenizer tokenizer1=null;
String[] tokenizer1_fields=null;//用存放读出来的每一个字段
BufferedReader bufferedInputFile=null;//缓冲
BufferedWriter bufferedOutputFile=null;
int m; // m用到每一行中的哪一个字段
// int n=0;//n累计总共几行用于计算总笔数,
for(int i=0;i<files.length;i++){ //这个循环用来遍历所有需要转换的文件
dep=0;//存款总金额置零
wtd=0;//取款总金额置零
acno=0;//每打开一个文件统计的总笔数就恢复为0
outputFile=new FileWriter(writeUrl+"\\"+files[i]);//转换后须准备写入的文件
inputFile=new FileReader(readUrl+"\\"+files[i]);//准备读取的文件
bufferedOutputFile=new BufferedWriter(outputFile);//缓冲
bufferedInputFile=new BufferedReader(inputFile);
//下面这段代码是计算出总笔数和存款总金额、取款总金额
tokenizer1_fields=new String[5];//每行5个字段
int x;
while((strReadLine=bufferedInputFile.readLine())!=null){ //读取文件中的每一行
acno+=1;//累计总笔数
//System.out.println(strReadLine);
tokenizer1=new StringTokenizer(strReadLine);
for( x=0;tokenizer1.hasMoreTokens();x++){
tokenizer1_fields[x]=tokenizer1.nextToken();
//System.out.println(tokenizer1_fields[x]);
}
try{
if(tokenizer1_fields[2].equals("C")){//通过收付标示来确定是存款还是取款
dep+=Integer.parseInt(tokenizer1_fields[3].substring(0,tokenizer1_fields[3].indexOf("."))+tokenizer1_fields[3].substring(tokenizer1_fields[3].indexOf(".")+1));
// dep+=float(tokenizer1_fields[3])*100;
}else if(tokenizer1_fields[2].equals("D")){
wtd+=Integer.parseInt(tokenizer1_fields[3].substring(0,tokenizer1_fields[3].indexOf("."))+tokenizer1_fields[3].substring(tokenizer1_fields[3].indexOf(".")+1));
//wtd+=(tokenizer1_fields[3])*100;
}else;
}catch(Exception e){
System.out.println(" 读出金额时转换错误,请仔细观察一下数据中第"+acno+"行的第四个字段是否有非数字字符,谢谢使用,再见!");
}
}
acno=acno-1;//最后一行是汇总行,所以总笔数减一.
//以下这一行是把所有的第二行字段都合并起来。
twoLine= two_recid+rccode+digdep+space.substring(0,11-(""+dep).toString().length())+dep +digwtd + space.substring(0, 11-(""+wtd).toString().length()) +wtd +space.substring(0, 5-(""+acno).toString().length()) +acno +space.substring(0, 8-testkey.length()) + testkey +endflag +eol;
// System.out.println("this two "+twoLine);
//以下这四句代码是把第一行和第二行的内容写进去。
bufferedOutputFile.write(oneLine);
bufferedOutputFile.flush();
bufferedOutputFile.write(twoLine);
bufferedOutputFile.flush();
String[] three_fields=new String[5];//每行共五个字段
bufferedInputFile.close();//关闭文件以便定位读取口,这一步需要改进
inputFile=new FileReader(readUrl+"\\"+files[i]);//重新打开准备读取的文件
bufferedInputFile=new BufferedReader(inputFile);
int Seqno=1; //顺序号
while((strReadLine=bufferedInputFile.readLine())!=null&&Seqno<=acno){ //读取文件中的每一行
StringTokenizer tokenizer2=new StringTokenizer(strReadLine);
m=0;
while(tokenizer2.hasMoreTokens()){//这个循环用来把读出来的一行中的每一个字段都读出来
three_fields[m]=tokenizer2.nextToken();//把读出来的每一个字段存到three_fields中
m++;
}
//下面这一句是把第三行开始的数据行整理好
try{
threeLine= three_recid+space.substring(0, 5-(""+Seqno).toString().length())+Seqno+space.substring(0, 18-three_fields[1].length())+three_fields[1]+ ( three_fields[2].equals("C")?"C":"D")+space.substring(0,11-(Integer.parseInt(three_fields[3].substring(0,three_fields[3].indexOf("."))+three_fields[3].substring(three_fields[3].indexOf(".")+1)) +"").length())+Integer.parseInt(three_fields[3].substring(0,three_fields[3].indexOf("."))+three_fields[3].substring(three_fields[3].indexOf(".")+1))+ NewID+"0"+ space.substring(0, 7-three_fields[0].length())+three_fields[0] +Endflag+eol ;
}catch(Exception e){
System.out.println("1读取第"+Seqno+"行时出错,请观察那一行中的第四个字段是否存在非数字字符,谢谢使用,再见!");
}
Seqno++;//顺序号加1
bufferedOutputFile.write(threeLine);
bufferedOutputFile.flush();
}
bufferedOutputFile.write("9");
bufferedOutputFile.flush();
}
}catch(Exception e){
}
}
private class TxtFilter extends Object implements FilenameFilter{
/** Creates a new instance of TxtFilter */
public TxtFilter() {
}
public boolean accept(File dir,String name){
return name.endsWith(".txt");
}
}
public static void main(String[] args){
ReadWrite readWrite=new ReadWrite("e:\\chinabank\\readone\\","e:\\chinabank\\sendtobank\\");
}
}
//下面是读取的文本文件
1.txt
0001a 455350400010001413 D 1478.00 123456789123
0002a 455350400010002231 D 1623.00 456464651166
0003a 455350400010003084 D 2171.00 564646161616
0004b 455350400010003440 D 1508.00 616516161666
HZ 4 678000
//下面是写入的文本文件
1.txt
14554816000120060710ddddddddddddddddddddddddddAE
2101C 0D 678000 412345678E
3 1455350400010001413D 147800w0 0001aE
3 2455350400010002231D 162300w0 0002aE
3 3455350400010003084D 217100w0 0003aE
3 4455350400010003440D 150800w0 0004bE
9