`

java批量处理数据

 
阅读更多
程序清单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数据批量处理

    在Java编程领域,数据批量处理是一项常见的任务,尤其在大数据、数据库操作以及系统集成等场景中,批量处理能显著提高效率并减少资源消耗。本文将深入探讨Java如何进行数据批量处理,涉及的主要知识点包括批量读取、...

    Java实现批量向mysql写入数据的方法

    本文中提供了一个完整的示例代码,演示了Java实现批量向mysql写入数据的方法,包括JDBC连接mysql数据库、批量向mysql写入数据和基本的异常处理等操作。该示例代码可以作为Java程序设计的参考,帮助读者更好地理解...

    java多线程实现大批量数据导入源码

    总的来说,本项目通过Java多线程技术,结合合理的数据切分和线程池管理,实现对大数据的高效批量处理。通过分析和优化这些关键点,我们可以根据实际情况调整参数,进一步提高数据导入导出的效率。

    java批量插入Oracle数据方法

    Java批量插入Oracle数据是一种高效的数据处理策略,尤其是在大数据量场景下。通过合理设计代码结构,利用`PreparedStatement`的批处理功能,可以显著提升数据插入的速度和系统的整体性能。在实践中,还需注意细节如...

    Java多线程Executors批量执行数据实现限流

    批量异步Executors处理数据,实现限流操作,QPS限流。 线程池调用第三方接口限流实现逻辑。 案例适合: 1.批量处理大数据。 2.数据批量导出。 3任务数据异步执行。 4.多线程请求第三方接口限流。

    Hbase笔记 —— 利用JavaAPI的方式操作Hbase数据库(往hbase的表中批量插入数据).pdf

    在本文档中,我们将深入探讨如何使用Java API与...总的来说,通过Java API与HBase交互涉及到配置连接、管理表结构和批量处理数据。理解这些基本操作对于高效地使用HBase至关重要,特别是在大数据处理和分析的场景下。

    java批量执行SQL

    ### Java批量执行SQL知识点解析 在Java开发过程中,经常需要与数据库进行交互,尤其是在处理大量数据时,如何高效地执行SQL语句变得尤为重要。本文将详细介绍如何利用Java进行批量SQL执行,包括其背景、实现原理、...

    Java_批量导出大数据量Excel方法.zip

    在Java开发中,批量导出大数据量到...通过以上方法,开发者可以构建一个高效且健壮的Java批量导出大数据量到Excel的解决方案。具体实现细节可能在提供的excelproj和ExpXLS文件中有所体现,建议解压后仔细研究源代码。

    neo4j批量数据导入

    通过理解和应用上述知识点,我们可以有效地实现Neo4j的批量数据导入,提高数据处理的效率。对于给定的压缩包"neo4j-batch",其内容可能包括了上述提到的Java源代码和相关的测试数据文件。通过分析这些文件,我们可以...

    Java 实现从Excel批量导入数据到MySQL

    在IT行业中,经常需要处理大量的数据,...总之,通过Java结合Apache POI和JDBC,我们可以高效地实现Excel数据批量导入到MySQL数据库,大大提升了数据处理的效率。这种技术在大数据处理、数据分析等领域有着广泛的应用。

    批量处理数据

    在IT行业中,批量处理数据是一项常见的任务,尤其在大数据、数据分析和数据库管理等领域。这个话题主要涉及如何有效地处理大量数据,提高工作效率,并确保数据的一致性和准确性。在本篇文章中,我们将深入探讨批量...

    java批量删除列表内容

    本文将深入探讨如何实现这个功能,以及相关的Java批量处理技术。 首先,让我们了解Java中最常用的列表接口`List`,它提供了多种操作集合的方法,包括添加、删除、查找等。在Java中,我们可以使用`ArrayList`或`...

    java批量获取excel数据导入word文档中.zip

    本项目"java批量获取excel数据导入word文档中.zip"旨在解决一个特定的问题:自动化地从Excel文件中提取数据,并将这些数据整合到Word文档中。这种功能对于需要大量文书工作的专业人士,如律师,或者其他需要重复性...

    springBoot+springBatch批量处理数据demo

    在这个“springBoot+springBatch批量处理数据demo”中,我们将探讨如何将这两个强大的工具结合在一起,实现高效的数据处理。 首先,SpringBoot的核心特性在于其自动配置,它通过`@SpringBootApplication`注解自动...

    java 批量导入excel数据

    这个过程涉及读取Excel文件、处理数据并将其有效地存入数据库。以下是一些关键的知识点,涵盖了从读取Excel到批量插入数据库的整个流程。 1. **Java与Excel的交互**: - 使用Apache POI库:Apache POI是一个流行的...

    java批量图片上传

    本话题聚焦于“Java批量图片上传”,这通常涉及到Web应用中的文件上传功能,尤其是处理大量图片的情况。在Oracle数据库环境下,这些图片数据可能需要存储在数据库中或者与数据库紧密关联。 首先,我们要理解图片...

    java批量获取百度地图坐标

    在Java编程环境中,批量获取百度地图坐标是一项常见的地理信息系统(GIS)任务,它涉及到网络请求、数据解析以及地理编码技术。下面将详细讲解这个过程涉及的知识点。 首先,我们需要了解百度地图API。百度地图提供...

    java 实现二维码批量打印

    4. **批量处理**: 如果需要批量生成二维码,可以遍历数据列表,每次调用上述代码生成一个二维码图片。生成后,可以将这些图片保存在服务器上或者内存中。 5. **设置打印任务**: 创建一个Java程序或者Web服务接口,...

    SuperMap Objects Java 批量修改

    本范例重点讲解如何利用SuperMap Objects Java 实现数据的批量修改,这对于处理大规模地理数据时提升效率至关重要。 首先,批量修改数据涉及的主要知识点包括: 1. **SuperMap Objects Java API**:这是SuperMap...

    java批量读取Excel表格

    Java批量读取Excel表格是一种常见的数据处理需求,特别是在大数据导入、报表生成或数据分析场景中。在Java中,我们可以借助Apache POI库来实现这一功能。Apache POI是一个强大的开源库,它允许Java开发者读写...

Global site tag (gtag.js) - Google Analytics