程序清单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<SIZE;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<origID.length;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<list.size();i++) { replaceLog=(String)list.get(i); } String[] replaceLogID=new String[list.size()]; for(int i=0;i<list.size();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<list.size();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<origID.length;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<fileName.length;i++) { String path1=(String)(fileName.toString()); System.out.println(path1); } for(int i=0;i<fileName.length;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<fName.length;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"); } }>
相关推荐
java数据批量处理
批量异步Executors处理数据,实现限流操作,QPS限流。 线程池调用第三方接口限流实现逻辑。 案例适合: 1.批量处理大数据。 2.数据批量导出。 3任务数据异步执行。 4.多线程请求第三方接口限流。
很多人都对Java在批量数据的处理方面是否是其合适的场所持有怀疑的念头,由此延伸,那么就会认为ORM可能也不是特别适合数据的批量处理。 其实,我想如果我们应用得当的话,完全可以消除ORM批量处理性能问题这方面的...
java多线程实现大批量数据切分成指定份数的数据,然后多线程处理入库或者导出,线程的个数和每份数据的数量都可以控制
N个线程对完成的A表数据做最后处理 支持大数据量跑批,就是个例子,本来是公司发送促销邮件用的,欢迎提意见和建议。 运行DispatcherMain可以测试,库结构自己可以根据code随便改成父子表关系的就行
java多线程处理数据库数据,使用并发包,无框架,可批量处数据库数据,进行增删改。。等等操作。
java批量处理word,包含批量转word与xml互转,去除首尾页面,批量追加文字,批量修改log图片,创建页眉、页脚,修改无规则的数据等等
项目应用中,有时候需要通过Java组件将矢量数据进行批量的叠加分析,本范例中主要是进行的批量对象的相交分析。
JAVA使用线程池查询大批量数据
java 实现数据批量处理,达到一定数量或者达到一定时间去处理
对大数据文本文件读取(按行读取)的优化,目前常规的方案有三种,第一...代码提供在RandomAccessFile基础上,整合内部缓冲区,效率会有提高,测试过程中1000w行数据用时1秒,1亿行数据用时103(比1438秒快了13倍左右)
2022年Hibernate下数据批量处理Java教程.docx
最近在做一个数据抽取工作,因为涉及一些表的数据修改,因此写了个小工具。 主要用到技术: Mybatis , java多线程
主要介绍了Java多线程批量数据导入的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,下面小编和大家来一起学习下吧
mybaits 多线程 实现数据批量插入 (运用CountDownLatch实现闭锁) 1、mybatis批处理 2、数据分批量查询 3、数据分批量插入
1、java 数据库操作基本流程 2、几个常用的重要技巧: ·可滚动、更新的记录集 ·批量更新 ·事务处理 java 数据库操作基本流程:取得数据库连接- 执行sql 语句- 处理执行结果- 释放数据库连接
可以批量修改dataGridView中的任意选中单元格的数据,可参看博文具体功能
采用POI、JXL框架导出CVS文件,支持千万级数据导出,无内存溢出,自己项目中使用中。
自己写的可以多线程并发处理数据流小工具,在n核处理器下使用小于n的线程数处理文件流,速度提升多倍(忘了好像是接近n-1倍)
这段Spring Boot代码展示了如何实现文件的批量下载与压缩。主要功能包括通过HTTP响应将多个文件打包成zip压缩包,并提供给用户一次性下载。以下是代码的主要功能点: 1.文件模拟数据:使用Map模拟了一组文件,其中...