java 批量处理_java批量处理数据

该博客介绍了使用Java进行批量文件处理的方法,包括读取文件、追加记录、日志记录、搜索并添加不同数据、替换记录等功能。通过ImproveReadFile和ImproveOperateFile两个类实现了对文件内容的增、删、改操作,并提供了处理日志的记录。
摘要由CSDN通过智能技术生成

程序清单ImproveReadFile

.java

package ImproveReadFile;

import java.io.BufferedReader;

import java.io.BufferedWriter;

import java.io.File;

import java.io.FileReader;

import java.io.FileWriter;

import java.io.RandomAccessFile;

import java.util.ArrayList;

public class ImproveReadFile {

public String[] getOrigFileId(String

OrigPath)

{

//获得原文件的Id数组

try

{

File origfile=new File(OrigPath);

FileReader origfileinput=new FileReader(origfile);

BufferedReader origbuffread=new

BufferedReader(origfileinput);

String origlineStr=origbuffread.readLine();

ArrayList list=new ArrayList();

while(origlineStr!=null)

{

String[] lineArr=origlineStr.split(",");

list.add(lineArr[0]);

origlineStr=origbuffread.readLine();

}

int SIZE=list.size();

String[] origIdNumber=new String[SIZE];

for(int i=0;i

{

origIdNumber=(String)list.get(i);

}

//测试origIdNumber

origbuffread.close();

return origIdNumber;

}catch(Exception e)

{

System.out.println(e.toString());

return null;

}

}

public void addRecord(String str,String origPath,String

logPath)

{

//把传入的记录增加到文件

try

{

File file=new File(origPath);

FileWriter fileout=new FileWriter(file,true);

BufferedWriter buffwrite=new BufferedWriter(fileout);

buffwrite.append(str);

buffwrite.flush();

buffwrite.newLine();

//测试添加成功

System.out.println("添加的数据是:"+str);

addToLog("新增到原文件中的一条记录是 :"+str,logPath);

buffwrite.close();

}catch(Exception e)

{

System.out.println(e.toString());

}

}

public void addToLog(String str,String logPath)

{

//把传入的记录增加到文件

try

{

File file=new File(logPath);

FileWriter fileout=new FileWriter(file,true);

BufferedWriter buffwrite=new BufferedWriter(fileout);

buffwrite.append(str);

buffwrite.flush();

buffwrite.newLine();

//测试添加成功

// System.out.println("添加的数据是:"+str);

buffwrite.close();

}catch(NullPointerException e)

{

//System.out.println("空指针");

}

catch(Exception e)

{

System.out.println(e.toString());

}

}

public void searchAdd(String pathAdd,String origPath,String

logPath)

{

//把add文件中和原文件中不同的数据添加到原文件中

String origPath1=origPath;

try

{

File dfile=new File(pathAdd);

FileReader fileinput=new FileReader(dfile);

BufferedReader buffread=new BufferedReader(fileinput);

String lineStr=buffread.readLine();

//获得原文件ID数组

String[] origID=getOrigFileId(origPath1);

while(lineStr!=null)

{

int j=1;//标记是否加入记录

String[] lineArr=lineStr.split(",");

String idNumer=lineArr[0];

for(int i=0;i

{

if(idNumer.equals(origID)||idNumer==origID)

{

j=0;

//System.out.println("不加入!");

}

}

if(j==1)

{

//把记录加入到原文件中

addRecord(lineStr,origPath1,logPath);

System.out.println("增加一条记录");

}

lineStr=buffread.readLine();

}

}catch(Exception e)

{

System.out.println(e.toString());

}

}

public void renameFile(String path,String oldname,String

newname){

if(!oldname.equals(newname)){//新的文件名和以前文件名不同时,才有必要进行重命名

File oldfile=new File(path+"\"+oldname);

File newfile=new File(path+"\"+newname);

if(newfile.exists())//若在该目录下已经有一个文件和新文件名相同,则不允许重命名

System.out.println(newname+"已经存在!");

else{

oldfile.renameTo(newfile);

}

}

}

public void replaceRecord(ArrayList list,String origPath,String

logPath,String tempPath,String path,String origName)

{

///替换和原文件中相同的记录

try

{

String[] replaceLog=new String[list.size()];

for(int i=0;i

{

replaceLog=(String)list.get(i);

}

String[] replaceLogID=new String[list.size()];

for(int i=0;i

{

String[] strArr=replaceLog.split(",");

replaceLogID=strArr[0];

}

//生成临时文件保存读取值和替换值

File tempfile=new File(tempPath);

System.out.println(tempPath);

tempfile.createNewFile();

//System.out.println("创建文件"+tempfile.createNewFile());

FileWriter filwrite=new FileWriter(tempfile,true);

BufferedWriter buf=new BufferedWriter(filwrite);

File file=new File(origPath);

FileReader fil=new FileReader(file);

BufferedReader buffread=new BufferedReader(fil);

String str=buffread.readLine();

String[] strArry=str.split(",");

String id=strArry[0];

while(str!=null)

{

int j=0;//标记

for(int i=0;i

{

if(id.equals(replaceLogID))

{

buf.write(replaceLog);

buf.flush();

System.out.println(i+" "+"j==1"+replaceLog);

j=1;

buf.newLine();

}

}

if(j==0)

{

buf.write(str);

//System.out.println("j==0"+str);

buf.flush();

buf.newLine();

}

str=buffread.readLine();

if(str==null)

{

//boolean rename=tempfile.renameTo(file);

特别注意,不关闭流就无法实现删除和重命名文件

buffread.close();

buf.close();

file.delete();

/调用重新命名的方法

renameFile(path,"temp.csv",origName);

}

strArry=str.split(",");

id=strArry[0];

System.out.println("id-----------"+id);

}

}catch(ArrayIndexOutOfBoundsException e)

{

//System.out.println(e);

}

catch(NullPointerException e)

{

//System.out.println("产生了一个空指针,不过不影响程序功能!");

}

catch(Exception e)

{

System.out.println(e.toString());

}

}

public void modifyFile(String pathModify,String origPath,String

logPath,String tempPath,String path,String origName)

{

//修改和原文件中相同的记录

ArrayList list=new ArrayList();

try

{

File fi=new File(pathModify);

FileReader fiReader=new FileReader(fi);

BufferedReader bufffi=new BufferedReader(fiReader);

String lineStr=bufffi.readLine();

测试

//System.out.println(lineStr);

String[] origID=getOrigFileId(origPath);//获得原文件的ID数组

while(lineStr!=null)

{

String[] lineArr=lineStr.split(",");

String idNumber=lineArr[0];

//System.out.println(idNumber);

for(int i=0;i

{

if(idNumber.equals(origID))

{

替换原文件中的记录

///调用替换原文件记录的函数

//replaceRecord(lineStr,origPath,logPath);

//System.out.println("传入的参数是:"+lineStr);

把符合要求的行记录用list保存起来

addToLog( "覆盖的原文件中的一条记录是: "+lineStr, logPath);

list.add(lineStr);

}

}

lineStr=bufffi.readLine();

if(lineStr==null)

{

replaceRecord(list,origPath,logPath,tempPath,path,origName);

}

lineArr=lineStr.split(",");

idNumber=lineArr[0];

//测试

//System.out.println("wwwwwwwwwww"+idNumber);

//System.out.println("llllllll"+lineStr);

}

///调用替换原文件记录的函数

//replaceRecord(list,origPath,logPath);

bufffi.close();

}catch(NullPointerException e)

{

//System.out.println("产生了一个空指针!");

}

catch(Exception e)

{

System.out.println(e.toString());

}

}

}

程序清单ImproveOperateFile.java:

package ImproveReadFile;

import java.io.*;

import java.util.*;

public class ImproveOperateFile {

private ImproveReadFile rwfile=new ImproveReadFile();

public void fileOperate(String rootpath,String logPath)

{

try{

File file=new File(rootpath);

File[] fileName=file.listFiles();

测试文件目录数组

System.out.println("文件目录中的文件列表如下:");

for(int i=0;i

{

String path1=(String)(fileName.toString());

System.out.println(path1);

}

for(int i=0;i

{

handleFileContent(fileName,rootpath,logPath);

}

}

catch(NullPointerException e)

{

//System.out.println("产生了一个空指针!");

}

catch(Exception e)

{

System.out.println(e.toString());

}

}

public void handleFileContent(File fileName,String

rootpath,String logPath)

{

try

{

String path=(String)(fileName.toString());

File file=new File(path);

String[] fName=file.list();

测试fName

//定义三个区分三个文件的标识

int indexCharAdd=-1;

int indexCharModify=-1;

int indexOrgFile=-1;

标识分辨每个目录下的文件

if((fName.length>1)&&(fName.length<4))//只有一个文件则不处理

{

for(int i=0;i

{

int indexCharAdd1=fName.indexOf("add");

int indexCharModify1=fName.indexOf("modify");

if(indexCharAdd1!=-1)

{

//此文件是Add文件

indexCharAdd=i;

}

if(indexCharModify1!=-1)

{

//此文件是Modify文件

indexCharModify=i;

}

if((indexCharAdd1==-1)&&(indexCharModify1==-1))

{

indexOrgFile=i;

}

}

}else{

System.out.println("本程序不处理!");

}

测试标识符号的值

System.out.println("indexCharAdd的值是:"+indexCharAdd+"

"+"indexCharModify的值是:"+indexCharModify+"

"+"indexOrgFile的值是:"+indexOrgFile);

System.out.println("------------------------------"+path);

//对每个目录下的文件调用方法进行读写处理

if(indexCharAdd!=-1)

{

/调用增加方法把源文件里面没有的项增加进去

//System.out.println(fName[indexCharAdd]+"

"+fName[indexOrgFile]);

String addPath=path+"\"+fName[indexCharAdd];

String origPath=path+"\"+fName[indexOrgFile];

rwfile.searchAdd(addPath,origPath,logPath);

}

if(indexCharModify!=-1)

{

调用方法把和原文件里面相同的项覆盖掉

String modifyPath=path+"\"+fName[indexCharModify];

String origPath=path+"\"+fName[indexOrgFile];

String tempPath=path+"\\temp.csv";

rwfile.modifyFile(modifyPath,

origPath,logPath,tempPath,path,fName[indexOrgFile]);

}

}

catch(NullPointerException e)

{

//System.out.println("产生了一个空指针!");

}

catch(Exception e)

{

System.out.println(e.toString());

}

}

public static void main(String[] args)

{

ImproveOperateFile f=new ImproveOperateFile();

/第一个参数是要处理的文件夹序列的上一级目录

/第二个参数是生成的处理日志的绝对路径

f.fileOperate("D:\\我的文件","D:\\log.txt");

}

}>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值