买的网站源码分享怎么导入java,网站源码放在哪里

大家好,今天来为大家解答买的网站源码分享怎么导入java这个问题的一些问题点,包括网站源码放在哪里也一样很多人还不知道,因此呢,今天就来为大家分析分析,现在让我们一起来看看吧!如果解决了您的问题,还望您关注下本站哦,谢谢~

0.基础信息(需要导入的excel表格数据,接收类,ReadListener)

详见2.1文章阿里巴巴Easyexcel导入单张sheet(2.1指定字段对应表格列名)

当前场景,我使用2个sheet,第3个sheet是空的

1.导入sheet1/sheet2

接口方法:

/**\n*读取excel的部分sheet\n*@paramexcelFile\n*@return\n*/\n@PostMapping(&34;)\n@SneakyThrows\npublicRetreadSheetN(MultipartFileexcelFile){\nExcelReaderexcelReader=EasyExcel.read(excelFile.getInputStream()).build();\n//读sheet1\nReadSheetreadSheet1=EasyExcel.readSheet(&34;).head(ExcelReadDTO.class).headRowNumber(2).registerReadListener(newExcelReadListener(excelService)).build();\n//读sheet2\nReadSheetreadSheet2=EasyExcel.readSheet(&34;).head(ExcelReadDTO.class).headRowNumber(2).registerReadListener(newExcelReadListener(excelService)).build();\n//这里注意一定要把sheet1sheet2一起传进去,不然有个问题就是03版的excel会读取多次,浪费性能\nexcelReader.read(readSheet1,readSheet2);\n//文档中说的,要么使用try-with-resources要么使用try-finally主要目的就是要执行临时文件的删除\n//在3.x的版本中read方法执行完成,会自动调用finish()方法,无需手动执行,详见源码\nreturnRet.success();\n}

2.无需手动执行删除缓存文件的原理

read方法源码

publicExcelReaderread(ReadSheet…readSheet){\nreturnread(Arrays.asList(readSheet));\n}

publicExcelReaderread(List<ReadSheet>readSheetList){\nexcelAnalyser.analysis(readSheetList,Boolean.FALSE);\nreturnthis;\n}

@Override\npublicvoidanalysis(List<ReadSheet>readSheetList,BooleanreadAll){\ntry{\nif(!readAll&&CollectionUtils.isEmpty(readSheetList)){\nthrownewIllegalArgumentException(&34;);\n}\nanalysisContext.readWorkbookHolder().setParameterSheetDataList(readSheetList);\nanalysisContext.readWorkbookHolder().setReadAll(readAll);\ntry{\nexcelReadExecutor.execute();\n}catch(ExcelAnalysisStopExceptione){\nif(LOGGER.isDebugEnabled()){\nLOGGER.debug(&34;);\n}\n}\n}catch(RuntimeExceptione){\nfinish();\nthrowe;\n}catch(Throwablee){\nfinish();\nthrownewExcelAnalysisException(e);\n}\n}

看到吧,上面方法最后,调用了finish()方法

再看下finish方法

@Override\npublicvoidfinish(){\nif(finished){\nreturn;\n}\nfinished=true;\nif(analysisContext==null||analysisContext.readWorkbookHolder()==null){\nreturn;\n}\nReadWorkbookHolderreadWorkbookHolder=analysisContext.readWorkbookHolder();\n\nThrowablethrowable=null;\n\ntry{\nif(readWorkbookHolder.getReadCache()!=null){\nreadWorkbookHolder.getReadCache().destroy();\n}\n}catch(Throwablet){\nthrowable=t;\n}\ntry{\nif((readWorkbookHolderinstanceofXlsxReadWorkbookHolder)\n&&((XlsxReadWorkbookHolder)readWorkbookHolder).getOpcPackage()!=null){\n((XlsxReadWorkbookHolder)readWorkbookHolder).getOpcPackage().revert();\n}\n}catch(Throwablet){\nthrowable=t;\n}\ntry{\nif((readWorkbookHolderinstanceofXlsReadWorkbookHolder)\n&&((XlsReadWorkbookHolder)readWorkbookHolder).getPoifsFileSystem()!=null){\n((XlsReadWorkbookHolder)readWorkbookHolder).getPoifsFileSystem().close();\n}\n}catch(Throwablet){\nthrowable=t;\n}\n\n//closecsv.\n//https://github.com/alibaba/easyexcel/issues/2309\ntry{\nif((readWorkbookHolderinstanceofCsvReadWorkbookHolder)\n&&((CsvReadWorkbookHolder)readWorkbookHolder).getCsvParser()!=null){\n((CsvReadWorkbookHolder)readWorkbookHolder).getCsvParser().close();\n}\n}catch(Throwablet){\nthrowable=t;\n}\n\ntry{\nif(analysisContext.readWorkbookHolder().getAutoCloseStream()\n&&readWorkbookHolder.getInputStream()!=null){\nreadWorkbookHolder.getInputStream().close();\n}\n}catch(Throwablet){\nthrowable=t;\n}\ntry{\nif(readWorkbookHolder.getTempFile()!=null){\nFileUtils.delete(readWorkbookHolder.getTempFile());\n}\n}catch(Throwablet){\nthrowable=t;\n}\n\nclearEncrypt03();\n\nremoveThreadLocalCache();\n\nif(throwable!=null){\nthrownewExcelAnalysisException(&34;,throwable);\n}\n}

在上面最后一个try-catch中(59行),可以发现,进行了删除临时文件的操作

FileUtils.delete(readWorkbookHolder.getTempFile());

3.ReaderListener和上篇文章一样

packagecom.example.support.excel.listener;\n\nimportcom.alibaba.excel.context.AnalysisContext;\nimportcom.alibaba.excel.read.listener.ReadListener;\nimportcom.example.global.HttpHolder;\nimportcom.example.service.ExcelService;\nimportcom.example.support.entity.ExcelReadDTO;\nimportlombok.Getter;\nimportlombok.extern.slf4j.Slf4j;\n\nimportjava.util.ArrayList;\nimportjava.util.List;\n\n/**\n*@authorLWB\n*@Descriptionexcel读取的监听器\n*有个很重要的点ExcelReadListener监听器不能被spring管理,要每次读取excel都要new,然后里面用到spring可以构造方法传进去\n*所以,如果需要传入spring管理的对象,要么按照文档中的说明,直接使用构造器传参进来,要么使用ThreadLocal线程级别的变量工具传参\n*实际应用中,可能会需要传入很多的spring管理的对象,或者其他上下文参数,遇到这种情况,建议使用ThreadLocal来传递参数,简单,便捷,无需重复修改构造器\n*如果是简单的传递个别上下文参数,也可以选用构造器传参的方式\n*/\n@Slf4j\npublicclassExcelReadListenerimplementsReadListener<ExcelReadDTO>{\n\nprivateExcelServiceexcelService;\n\n/**\n*不适用构造器传入,使用threadLocal工具传入\n*适用于读取监听器中,需要使用多个上下文参数的情况\n*/\npublicExcelReadListener(){\nthis.excelService=HttpHolder.get(&34;,ExcelService.class);\nStringp1=HttpHolder.get(&34;,String.class);\nStringp2=HttpHolder.get(&34;,String.class);\n}\n\n/**\n*构造器中传入spring管理的对象\n*适用于传入较少上下文参数的情况\n*@paramexcelService\n*/\npublicExcelReadListener(ExcelServiceexcelService){\nthis.excelService=excelService;\n}\n\n/**\n*每隔N条存储数据库,实际使用中可以1000条或者更多,然后清理cachedDataList,方便内存回收\n*如果表格数据量很大,成千上万条,可以分批进行入库,数量不多的话,没必要做分配\n*/\nprivatestaticfinalintBATCH_COUNT=100;\n\n/**\n*缓存的数据\n*/\nprivateList<ExcelReadDTO>cachedDataList=newArrayList<>(BATCH_COUNT);\n\n/**终止读取,提示前端的信息*/\n@Getter\nprivateStringstopMsg;\n\n\n/**\n*这个方法,每一条数据解析都会来调用\n*@paramdata\n*@paramcontext\n*/\n@Override\npublicvoidinvoke(ExcelReadDTOdata,AnalysisContextcontext){\nlog.info(&34;,context.readSheetHolder().getSheetName(),data.toString());\n//达到BATCH_COUNT了,需要去存储一次数据库,防止数据几万条数据在内存,容易OOM\n/*if(cachedDataList.size()>=BATCH_COUNT){\n//保存\nexcelService.saveData();\n//存储完成清理list\ncachedDataList.clear();\n}*/\n\n}\n\n/**\n*所有数据解析完成了会来调用\n*@paramcontext\n*/\n@Override\npublicvoiddoAfterAllAnalysed(AnalysisContextcontext){\nlog.info(&34;,context.readSheetHolder().getSheetName());\n//若进行分批处理,在读取完成后,还要检查下cachedDataList中是否还有剩余未入库的数据,因为如果没达到缓存最大值,invoke方法不会进行存储\n//if(cachedDataList.size()>0)excelService.saveData();\n}\n\n\n}\n

4.控制台输出

c.e.s.excel.listener.ExcelReadListener:正在读取sheet:[Sheet1]的数据:ExcelReadDTO(str=1,time=FriMay1312:34:56CST2022,money=1.23)\nc.e.s.excel.listener.ExcelReadListener:正在读取sheet:[Sheet1]的数据:ExcelReadDTO(str=2,time=FriMay1313:34:56CST2022,money=1.24)\nc.e.s.excel.listener.ExcelReadListener:正在读取sheet:[Sheet1]的数据:ExcelReadDTO(str=3,time=FriMay1314:34:56CST2022,money=1.25)\nc.e.s.excel.listener.ExcelReadListener:正在读取sheet:[Sheet1]的数据:ExcelReadDTO(str=4,time=FriMay1315:34:56CST2022,money=1.26)\nc.e.s.excel.listener.ExcelReadListener:sheet:[Sheet1]读取完成!\nc.e.s.excel.listener.ExcelReadListener:正在读取sheet:[Sheet2]的数据:ExcelReadDTO(str=5,time=FriMay1316:34:56CST2022,money=2.01)\nc.e.s.excel.listener.ExcelReadListener:正在读取sheet:[Sheet2]的数据:ExcelReadDTO(str=6,time=FriMay1317:34:56CST2022,money=3.01)\nc.e.s.excel.listener.ExcelReadListener:正在读取sheet:[Sheet2]的数据:ExcelReadDTO(str=7,time=FriMay1318:34:56CST2022,money=4.01)\nc.e.s.excel.listener.ExcelReadListener:正在读取sheet:[Sheet2]的数据:ExcelReadDTO(str=8,time=FriMay1319:34:56CST2022,money=5.01)\nc.e.s.excel.listener.ExcelReadListener:sheet:[Sheet2]读取完成!

关于买的网站源码分享怎么导入java,网站源码放在哪里的介绍到此结束,希望对大家有所帮助。

Published by

风君子

独自遨游何稽首 揭天掀地慰生平