# file-analysis **Repository Path**: andnnl/file-analysis ## Basic Information - **Project Name**: file-analysis - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 3 - **Forks**: 0 - **Created**: 2021-06-03 - **Last Updated**: 2024-07-01 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 文件内容分批读取 ### 使用场景 导入文件解析内容,并分批入库 ### 功能 * 支持去掉表头 * 分批大小 * 每批读取最大行数 * 计算总行数 * 支持解压并读取 * v1.0.8 增加返回行号 ### 支持的文件格式 txt csv xls xlsx ### 用法 ```java AnalysisListenerDf listener=new AnalysisListenerDf() { @Override public void invokeBatch(List> rowList) { logger.info("batch size:"+rowList.size()); for (List strings : rowList) { logger.info(strings.toString()); } } }; AnalysisParam param = AnalysisParam.build() .setBatchSize(100000)//读到一批后调用一次invokeBatch .setDelHeadRows(1)//删除头部行数,空行不算 // .setExt("txt")//指定解析的文件格式 // .setCharset("UTF-8")//指定解析的文件编码 // .setCharset("GBK")//指定解析的文件编码 .setSplitLimit(2)//分割2列 .setMaxRow(0);//限制读取行数,0:不限制 //总行数 CountListener countlistener=new CountListener(); FileAnalysisManage.analysis(file, countlistener, param); logger.info("listener.count:"+countlistener.getCount()); FileAnalysisManage.analysis(file, listener, param); ``` ###增加返回行号,从1开始 ```java AnalysisListenerBase listener = (AnalysisListenerNum) (rowList,rowNumList) -> { logger.info("batch size:" + rowList.size()+" rowNum size:" + rowNumList.size()); for (List strings : rowList) { // logger.info(strings.toString()); } }; //或者 AnalysisListenerBase listener = (AnalysisListenerRowNum) (row, rowNum) -> { logger.info("row:" + row+" rowNum :" + rowNum); }; ``` ### 压缩包解析 ```java File file = new File("E:\\test.zip"); AnalysisListenerDf listener = rowList -> { logger.info("batch size:" + rowList.size()); for (List strings : rowList) { // logger.info(strings.toString()); } }; AnalysisParam param = AnalysisParam.build() .setBatchSize(100000)//读到一批后调用一次invokeBatch .setDelHeadRows(1)//删除头部行数,空行不算 // .setExt("txt")//指定解析的文件格式 // .setCharset("UTF-8")//指定解析的文件编码 // .setCharset("GBK")//指定解析的文件编码 // .setSplitLimit(2)//txt分割2列 .setMaxRow(0);//限制读取行数,0:不限制 CountListener countlistener=new CountListener(); FileAnalysisManage.analysisZip(file, countlistener, param); logger.info("listener.count:"+countlistener.getCount()); FileAnalysisManage.analysisZip(file, listener, param); ``` ###文件编码判断 目前使用cpdetector也不太准确,UTF-8+BOM判断不出来,需要把libs目录下的包注册本地仓库或私有仓库 不喜欢用cpdetector,可换掉 ###推送包 mvn deploy:deploy-file -Dmaven.test.skip=true -Dfile=C:\workspace\file-analysis\libs\cpdetector_1.0.10.jar -DgroupId=net.sourceforge.cpdetector -DartifactId=cpdetector -Dversion=1.0.10 -Dpackaging=jar -Durl=http://59.36.73.94:8081/nexus/content/repositories/thirdparty -DrepositoryId=thirdparty mvn deploy:deploy-file -Dmaven.test.skip=true -Dfile=C:\workspace\file-analysis\libs\chardet-1.0.jar -DgroupId=org.mozilla.intl -DartifactId=chardet -Dversion=1.0 -Dpackaging=jar -Durl=http://59.36.73.94:8081/nexus/content/repositories/thirdparty -DrepositoryId=thirdparty mvn deploy:deploy-file -Dmaven.test.skip=true -Dfile=C:\workspace\file-analysis\libs\jargs-1.0.jar -DgroupId=jargs -DartifactId=jargs -Dversion=1.0 -Dpackaging=jar -Durl=http://59.36.73.94:8081/nexus/content/repositories/thirdparty -DrepositoryId=thirdparty mvn deploy:deploy-file -Dmaven.test.skip=true -Dfile=C:\workspace\file-analysis\libs\antlr-2.7.4.jar -DgroupId=antlr -DartifactId=antlr -Dversion=2.7.7 -Dpackaging=jar -Durl=http://59.36.73.94:8081/nexus/content/repositories/thirdparty -DrepositoryId=thirdparty