csv文件上传/读取/压缩/保存

import com.fasterxml.jackson.dataformat.csv.CsvMapper;
import com.fasterxml.jackson.dataformat.csv.CsvSchema;
import com.fasterxml.jackson.databind.SequenceWriter;
import com.fasterxml.jackson.dataformat.csv.CsvGenerator;public String upload(Model model, HttpServletRequest request,@RequestParam("uploadFile") MultipartFile file, @AuthenticationPrincipal LoginUserDetails userDetails) {// 文字コード設定Reader reader = new InputStreamReader(file.getInputStream(), "Shift_JIS");//这个model是普通的实体类,没任何特别的东西Field[] fields = MyModel.class.getDeclaredFields();//把model的信息加入到CsvSchema中CsvSchema.builder().addColumn(fields[0].getName(), CsvSchema.ColumnType.STRING).addColumn(fields[1].getName(), CsvSchema.ColumnType.STRING).addColumn(fields[2].getName(), CsvSchema.ColumnType.STRING).build();CsvMapper csvMapper = new CsvMapper();MappingIterator<Object> readValues = csvMapper.readerFor(MyModel.class).with(csvSchema.withHeader())//不读取上传文件的表头.readValues(reader);//項目数が超える場合は。以下、CSVMappingExceptionを自動的にThrow、catch側にゲットList<Object> modelList = readValues.readAll();List<FileModel> fileModelList = new ArrayList<>();modelList.forEach(item ->{//データ操作...MyModel myModel= (MyModel) item;FileModel fileModel= new FileModel ();fileModel.setInfo1(item.getInfo1());fileModel.setInfo2(item.getInfo2());fileModel.setInfo3(item.getInfo3());fileModelList.add(fileModel);});      //ファイル作成CsvMapper csvMapper = new CsvMapper();csvMapper.configure(CsvGenerator.Feature.ALWAYS_QUOTE_STRINGS, true);//数据之间双引号设置打开CsvSchema csvSchema = csvMapper.schemaFor(FileModel.class);//model的信息 //文件每1000条数据就分割一个文件,这个是计算需要输出几个文件int size = fileModelList.size();int fileCreateCount = size % config.get1000() == 0? (size / config.get1000()): (size / config.get1000()) + 1;// 1000件以上の実行//文件保存的位置List,后面根据这个list把出力的临时文件进行压缩zip化,把压缩后不用的临时文件删除//后面就不详细写了List<File> filesInfoList = new ArrayList<>();String filePath = "c.\\test.csv";//设置你要保存地址,根据自己做修改for (int i = 1; i < fileCreateCount; i++) {File file = new File(filePath);filesInfoList.add(file);//后面压缩文件用的Path path = Paths.get(filePath);try (BufferedWriter bw = Files.newBufferedWriter(path, Charset.forName("Shift_JIS"));    SequenceWriterwriter=csvMapper.writer(csvSchema.withHeader().withLineSeparator("\r\n"))//每行用CRLF分行.writeValues(bw)) {// Tag を使ています// csvSchema.withColumnSeparator('\t')//先取list中的1000件,每输出1000件就删除掉这个list对应的1000件List<FileModel> subList = fileModelList.subList(0, config.get1000());for (FileModel model : subList) {writer.write(model);}} catch (IOException e) {log.warn("stream writer error");this.serviceFileDelete(filesInfoList);}// 出力したの項目を削除 出力过的1000件删除fileModelList.subList(0, config.get1000()).clear();}// 1000件以内または残り件数の処理 1000件以内或者剩余文件不足1000的时候Path path = Paths.get(filePath);try (BufferedWriter bw = Files.newBufferedWriter(path, Charset.forName("Shift_JIS"));SequenceWriter writer = csvMapper.writer(csvSchema.withHeader().withLineSeparator("\r\n")).writeValues(bw)) {// Tag を使ています// csvSchema..withColumnSeparator('\t')for (FileModel model : fileModelList) {writer.write(model);}// ファイル圧縮 文件压缩File zipFile = new File("c:\\test.zip");OutputStream outputStream = new FileOutputStream(zipFile);FileToZipUtils.toZip(filesInfoList, outputStream);// ファイル保存 保存到AWS s3中try (InputStream inputStream = new FileInputStream(zipFile)) {//这个方法在AWS存储文章中记载this.fileSave();}} 
保存用的实体类设置:输出文件表头设置
import java.io.Serializable;import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;import lombok.Data;//@JsonPropertyOrder和@JsonProperty设置一个就可以了
@Data
@JsonPropertyOrder({ "インフォ1", "インフォ2", "インフォ3" })
public class FileModel implements Serializable {private static final long serialVersionUID = 1L;@JsonProperty("インフォ1")private String info1;@JsonProperty("インフォ2")private String info2;@JsonProperty("インフォ3")private String info3;
}
文件压缩工具类/zip化
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.List;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;import lombok.extern.slf4j.Slf4j;/*** * @ClassName: FileToZipUtils**/
@Slf4j
public class FileToZipUtils {public static void toZip(List<File> srcFiles, OutputStream out) throws IOException {long start = System.currentTimeMillis();try (ZipOutputStream zos = new ZipOutputStream(out)) {for (File srcFile : srcFiles) {byte[] buf = new byte[512];zos.putNextEntry(new ZipEntry(srcFile.getName()));int len;try(FileInputStream in = new FileInputStream(srcFile)){while ((len = in.read(buf)) != -1) {zos.write(buf, 0, len);}zos.closeEntry();}}long end = System.currentTimeMillis();log.info("to Zip:OK" + (end - start) + " ms");}}private FileToZipUtils() {}
}

Csvmapper操作csv文件相关推荐

  1. python中csv文件操作_python中操作csv文件

    python中操作csv文件 读取csv improt csv f = csv.reader(open("文件路径","r")) for i in f: pri ...

  2. Pandas 操作 csv 文件

    Pandas 操作 csv 文件 官方英文文档 官方文档PDF下载 中文文档 一.安装 Pandas 安装 Pandas: pip3 install pandas 导入 Pandas: import ...

  3. 使用.NET类库操作CSV文件

    CSV文件,是指使用逗号对数据进行分割的文本数据文件.昨天有人提出了一个问题,就是怎么对CSV文件进行操作,并且给出了一个类的定义.我根据这个类定义实现了一个能够读些CSV文件的类. 由于涉及到了字符 ...

  4. pythoncsv文件的操作_python操作CSV文件

    概念:CSV是逗号分隔值或者字符分割值,其文件以纯文本形式存储表格数据.CSV文件可以用文本文件或者转换成EXCEL(直接用EXCEL也可以,但是可能会有一些问题)打开.因此更适合通过CSV文件进行程 ...

  5. java解析csv文件工具类,java操作CSV文件工具类

    离线路灯 UID:3 注册时间2011-08-21 最后登录2021-03-15 在线时间5398小时 发帖659 精华44 金币3650 威望1881 股份280 发帖659 金币3650威望188 ...

  6. python操作csv文件

    csv文件中,以,作为分隔符,先手动创建一个csv格式的文件file.csv: #文件的读取 import csv    #首先导入csv模块 with open("file.csv&quo ...

  7. python操作csv文件第7行开始的数据_Python教程-Python读写CSV文件

    前言 本教程学习在Python中使用CSV文件.CSV(逗号分隔值)格式是在电子表格和数据库中使用的非常流行的导入和导出格式.Python语言包含该模块,该模块具有用于读取和写入CSV格式的数据的类. ...

  8. python创建一个csv文件_python操作csv文件

    1 importcsv2 data =[3 #使用数字和字符串的数字都可以 4 ("ken","mafe",23),5 ("Tame",&q ...

  9. 天池csv转成grt代码里的luna的csv,pandas库来操作csv文件(pd.DataFrame,pd.concat,pd.Series,to_csv等)实现

    ps之前已经稍微处理过相关的csv文件,但是没有记录,发现基本忘光了看来记录还是一件非常重要的事情.碰巧DSB2017grt团队的代码里用的csv比较奇葩,我就把天池的数据的csv改成他们使用的模样. ...

最新文章

  1. mysql 10 进制 转36_mysql 10进制与35进制之间的转换 注意Power处理bigint的问题
  2. xp下administrator用户登录条不显示,怎么办?
  3. 什么是对象的消息_这一次,我们用最详细的方式解析Android消息机制的源码
  4. 在PowerDesigner中设计物理模型1——表和主外键
  5. React的Ant Design Pro目录结构
  6. imp命令导入指定表_Sqoop 使用shell命令的各种参数的配置及使用方法
  7. matlab旋转机械转子故障信号仿真,旋转机械转子不对中故障诊断技术研究解说.docx...
  8. css叠层_CSS 中重要的层叠概念
  9. 新安装XCode7/XCode8 模拟器无法运行报-unable to boot the simulator解决方法
  10. pid调节软件_三面大疆惨败,因为不懂PID的积分抗饱和
  11. python刷屏代码_python 刷屏
  12. Arcgis操作系列一:shp矢量数据的面积计算
  13. SPIR-V 研究:编译器基本原理(一)
  14. 【Python黑科技】孤独的程序员和AI机器人朋友聊天解闷(免费接口+保姆级图文+实现代码注释)
  15. Hadoop入门——初识Hadoop
  16. 鲁大师2023年Q3电脑排行:三足鼎立,PC圈一场旷日持久之战即将开启
  17. c语言socket通讯和进行进行大文件分片传输
  18. telnet 不是内部或外部命令,也不是可运行的程序解决方案:Windows 安装Telnet客户端
  19. 手把手教你配置哔哔点啥
  20. cesium加载wms、wmts、tms、wfs服务

热门文章

  1. 【PTA】哈利·波特的考试
  2. 一键 linux桌面安装vnc,Linux OpenVZ Debian 7 32/64bit环境一键安装VNC桌面环境教程
  3. java策略模式(Java策略模式多种返回结果)
  4. 软件测试交付物、交付文档、测试产物等如何写?有何依据?模板是是什么?
  5. MVC 网上招聘系统的设计与实现java jsp 程序设计 课程设计 毕业设计-附源码02135
  6. 【虹科分享】在容器上使用 ntop 工具的最佳实践
  7. CCIE和HCIE工程师工资一般多少?
  8. markdown渲染增广矩阵及矩阵内元素对齐
  9. 嵌入式linux设备驱动程序是,详解嵌入式Linux设备驱动程序
  10. Cannot add property 1, object is not extensible