Hutool导入导出用法

整理了下Hutool导入导出的简单使用。

导入maven或jar包(注意这里导入的poi只是为了优化样式)

<!-- https://mvnrepository.com/artifact/cn.hutool/hutool-all -->
<dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.3.0</version>
</dependency><!-- https://mvnrepository.com/artifact/org.apache.poi/poi -->
<dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>4.0.1</version>
</dependency>

代码部分:

import cn.hutool.core.io.FileUtil;
import cn.hutool.poi.excel.ExcelReader;
import cn.hutool.poi.excel.ExcelUtil;
import cn.hutool.poi.excel.ExcelWriter;
import org.apache.poi.ss.usermodel.*;import javax.servlet.ServletOutputStream;
import java.io.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;/*** hutool测试(导入导出)*/
public class HutoolTest {public static void main(String[] args) {//导出exportExcel();//导入importExcel();}/*** 导出*/private static void exportExcel(){//本地导出的路径String exportPath = "E:/测试图片/测试.xlsx";try{//处理表头对应数据List<String> titleList = new LinkedList<>();titleList.add("姓名");titleList.add("年龄");titleList.add("地点");// 创建一些数据List<List<String>> data = new ArrayList<>();data.add(Arrays.asList("张三", "25", "北京"));data.add(Arrays.asList("李四", "30", "上海"));// 通过工具类创建writerExcelWriter writer = new ExcelWriter();// 一次性写出内容,使用默认样式,强制输出标题writer.writeHeadRow((Iterable<?>) titleList);// 写入内容writer.write(data);//设置表头宽度setSizeColumnBt(writer.getSheet(),titleList.size());Workbook workbook = writer.getWorkbook();//服务器上返回时
//            response.setContentType("application/vnd.ms-excel;charset=ISO-8859-1");
//            filename = new String(filename.getBytes("GB2312"), "ISO8859-1");
//            response.setHeader("content-disposition", "attachment;filename=" + filename);
//            response.addHeader("Pargam", "no-cache");
//            response.addHeader("Cache-Control", "no-cache");
//            ServletOutputStream sout = response.getOutputStream();//本地导出时ByteArrayOutputStream sout = new ByteArrayOutputStream();workbook.write(sout);InputStream input = new ByteArrayInputStream(sout.toByteArray());// 测试导出到本地writeToLocal(exportPath,input);System.out.println("导出完成");// 关闭writer,释放内存writer.close();workbook.close();sout.flush();sout.close();} catch (Exception e) {e.printStackTrace();}}/*** 导入*/private static void importExcel(){//本地导入的路径String importPath = "E:/测试图片/测试.xlsx";// 指定 Excel 文件路径(正常是通过input流转)File excelFile = FileUtil.file(importPath);// 创建 ExcelReader 对象ExcelReader reader = ExcelUtil.getReader(excelFile);// 读取第一个sheet的数据List<List<Object>> data = reader.read();for (List<Object> data1 : data){System.out.println(data1.toString());}}/*** 自适应宽度(中文支持)(表头)** @param sheet sheet* @param cellSize  因为for循环从0开始,size值为 列数-1*/private static void setSizeColumnBt(Sheet sheet, int cellSize) {for (int columnNum = 0; columnNum <= cellSize; columnNum++) {int columnWidth = sheet.getColumnWidth(columnNum) / 256;Row currentRow = sheet.getRow(0);if (currentRow.getCell(columnNum) != null) {Cell currentCell = currentRow.getCell(columnNum);if (currentCell.getCellType() == CellType.STRING) {int length = currentCell.getStringCellValue().getBytes().length;if (columnWidth < length + 1) {columnWidth = length + 8;}}}sheet.setColumnWidth(columnNum, columnWidth * 256);}}/*** 将InputStream写入本地文件* @param destination 写入本地目录* @param input 输入流* @throws IOException IOException*/public static void writeToLocal(String destination, InputStream input)throws IOException {int index;byte[] bytes = new byte[1024];FileOutputStream downloadFile = new FileOutputStream(destination);while ((index = input.read(bytes)) != -1) {downloadFile.write(bytes, 0, index);downloadFile.flush();}input.close();downloadFile.close();}
}

导出结果截图:
在这里插入图片描述

导入结果打印:

[姓名, 年龄, 地点]
[张三, 25, 北京]
[李四, 30, 上海]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/663352.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【笔记】Helm-5 Chart模板指南-6 流控制

流控制 控制结构&#xff08;在模板语言中称为“actions”&#xff09;提供给您和模板作者控制模板迭代流的能力。Helm的模板语言提供了以下控制结构&#xff1a; if/else&#xff0c;用来创建条件语句 with&#xff0c;用来指定范围 range&#xff0c;提供“for each”类型…

2024技术发展洞察与趋势学习总结

2023技术发展洞察 2024技术发展趋势

QT假如有三个线程如何保证顺序执行

目录 1 QSemaphore 2 QMutex和QWaitCondition 3 QFuture 1 QSemaphore #include <QSemaphore> #include <QThread> #include <QDebug> QSemaphore sem1(1); QSemaphore sem2(0); QSemaphore sem3(0);class Thread1 : public QThread { public:void run()…

服务器为什么老是被攻击?被攻击了怎么办?

1、关闭端口&#xff0c;只打开必要的端口 服务器端口是攻击的主要入口&#xff0c;是服务器的外部窗口。服务器上的开放端口被黑客使用&#xff0c;他们通过这些开放端口攻击服务器。相对有效的预防方法是关闭一些不必要的端口&#xff0c;然后修改关键端口。如果你少开一个开…

《Lua程序设计》-- 学习10

环境&#xff08;Environment&#xff09; 具有动态名称的全局变量 全局变量的声明 由于Lua语言将全局变量存放在一个普通的表中&#xff0c;所以可以通过元表来发现访问不存在全局变量的情况。 正如前面所提到的&#xff0c;我们不允许值为nil的全局变量&#xff0c;因为值为…

Beats:在单个服务器上配置多个 Beats 实例

本文档作为如何在同一服务器上配置和运行 Filebeat/Metricbeat/Auditbeat 的多个实例的指南。 当你需要为同一台计算机上的不同应用程序或环境分离数据收集和处理时&#xff0c;此设置特别有用。 在今天的展示中&#xff0c;我们将以 Filebeat 为例来进行展示。此方法也适用于…

element-ui上传图片组件封装

//上传图片组件 定义文件imageUpload <template><div class"component-upload-image"><el-upload multiple :action"uploadImgUrl" list-type"picture-card" :on-success"handleUploadSuccess":before-upload"han…

Mybatis | 逻辑 sql - 结果的映射默认有缓存

mybatis 里 select 方法默认会使用缓存&#xff0c;即&#xff0c;如果逻辑 sql 的入参不变&#xff0c;则会走缓存。 所以对于只有表名 tableName 变&#xff08;用于 sharding&#xff09;的情况下&#xff0c;需要修改 xml 文件&#xff1a;flushCache true&#xff0c;来…

分享一个Qt使用的模块间通信类

需求&#xff1a; 不同线程&#xff0c;或者同一线程的不同类之间通信&#xff0c;按照Qt的机制&#xff0c;定义一个信号&#xff0c;一个槽&#xff0c;然后绑定。以两个类A,B为例&#xff0c;A触发一个信号&#xff0c;B执行一个槽&#xff0c;在定义好信号和槽之后&#x…

【Java程序设计】【C00196】基于(JavaWeb+SSM)的旅游管理系统(论文+PPT)

基于&#xff08;JavaWebSSM&#xff09;的旅游管理系统&#xff08;论文PPT&#xff09; 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于ssm的旅游平台 本系统分为前台、管理员2个功能模块。 前台&#xff1a;当游客打开系统的网址后&#xff0c;首先看到的…

C# 引用同一个dll不同版本的程序集

因为项目需要所以必须在项目中引用不同版本的同一程序集 我要引用的文件是newtonsoft.json.dll 两个版本为12.0.0.0 和4.0.0.0 1.如果已经先引入了newtonsoft.json 12.0.0.0版本的程序集&#xff0c;如果直接引入另一个版本的程序集的话会提示不成功&#xff0c;所以先将另一个…

分布式ID介绍实现方案总结

分布式 ID 介绍 什么是 ID&#xff1f; 日常开发中&#xff0c;我们需要对系统中的各种数据使用 ID 唯一表示&#xff0c;比如用户 ID 对应且仅对应一个人&#xff0c;商品 ID 对应且仅对应一件商品&#xff0c;订单 ID 对应且仅对应一个订单。 我们现实生活中也有各种 ID&…

BetrFS: A Compleat File System for Commodity SSDs——论文阅读

EuroSys 2022 Paper 分布式元数据论文汇总 问题 在不同的工作负载下&#xff0c;没有单一的Linux文件系统在普通SSD上始终表现良好。我们将一个完备的文件系统定义为在各种微基准测试和应用程序中&#xff0c;没有一个工作负载的性能低于最佳文件系统性能的30%&#xff0c;并…

EasyX图形库学习(一)

目录 一、easyX图形库基本介绍 1、easyX的原理 2、easyX的安装 3、easyX的颜色&#xff08;RGB颜色模型&#xff09; 颜色模型相关函数: 4、easyX的坐标 二、相关函数介绍: 绘图设备相关函数&#xff1a; 图形颜色及样式设置相关函数: 图形绘制相关函数: 文字输出相关…

Linux多线程服务端编程:使用muduo C++网络库 学习笔记 第十一章 反思C++面向对象与虚函数(下)

11.7.2 值语义与生命期 值语义的一个巨大好处是生命期管理很简单&#xff0c;就跟int一样——你不需要操心int的生命期。值语义的对象要么是stack object&#xff0c;要么直接作为其他object的成员&#xff0c;因此我们不用担心它的生命期&#xff08;一个函数使用自己stack上…

npm使用国内淘宝镜像

一、命令配置 1、设置淘宝镜像源 npm config set registry https://registry.npmmirror.com2、查看镜像使用状态 npm config get registry如果返回https://registry.npmmirror.com/,说明配置的是淘宝镜像。 如果返回https://registry.npmjs.org/,说明配置的是官网镜像。 二…

分享个前端工具-取色调色工具

这里虽然贴了两个&#xff0c;但推荐 Pipette. PipetteWin22.10.22.zip: https://download.csdn.net/download/rainyspring4540/88799632 图标&#xff1a; 界面&#xff1a; ColorPix https://download.csdn.net/download/rainyspring4540/88799642 图标&#xff1a; 界面…

开源协议介绍

开源协议是控制开源软件分发的法律声明&#xff0c;它使得软件能够被任何人自由使用、复制、修改和分发。下面是一些常见的开源协议&#xff1a; MIT 许可证&#xff1a;非常灵活的许可证&#xff0c;允许你做几乎任何事情&#xff0c;只要在副本中包含原始的版权和许可声明。…

Google Play上架:因行为透明度被拒审或下架的政策自查(基于区块链的内容)

近期很多朋友的项目出现因行为透明度问题被谷歌拒审或者已经上架的包被下架甚至封号,今天解释一下为什么会被封号下架,根据是什么? 目录 政策发布时间与截止时间政策内容政策背景政策解析和问题讲解政策发布时间与截止时间 基于区块链的内容相关政策,于2023-07-12 公布,…

看完这篇文章,你一定能看懂Datasheet!

大家好&#xff0c;我是砖一。 针对以上学妹的疑问&#xff0c;我有几点建议&#xff0c;大家可以听一下~ 一&#xff0c;怎么样查找Datasheet&#xff08;数据手册&#xff09; 大多数人下意识就点开浏览器&#xff0c;把型号往里面一输&#xff0c;不建议这样。 对于刚入行…