Hutool常用工具

目录:

日期时间类工具

字符串,long,Calendar转换为Date
      时间单位(ms、s)转换
      字符串转换为日期
      日期转换为字符串
      从日期对象中提取出 year month
      获取日期对象的开始和结束时间(每天或者每月)
      获取指定date&&偏移量的目标date
      时间日期差

测试工具

性能测试工具(毫秒计时器工具)
      FileAppender 文件追加操作
      断言工具
      日志打印输出

文件 && IO流

流的获取,流的关闭
      File转换为流
      文件操作(CRUD,类型判断)
      文件流的二次封装(FileReader,FileWriter)

其他工具

反射工具
      UUID && Snowflake 工具
      正则工具
      字符串参数校验工具
      BeanUtil不同bean之间进行赋值&&Bean转化为Map
      JSON工具

Excel工具

List、Map、Bean 导出Excel
      客户端下载Excel模板
      客户上传Excel数据,并且存储数据到数据库
      客户下载从数据库生成的Excel表
      样式和其他设置
      读取Excel表操作

日期时间类工具


1. 字符串,long,Calendar转换为Date


返回目录

String a = "2017-05-06";
Date value = Convert.toDate(a);
//当前时间
Date date = DateUtil.date();
//当前时间
Date date2 = DateUtil.date(Calendar.getInstance());
//当前时间
Date date3 = DateUtil.date(System.currentTimeMillis());
//当前时间字符串,格式:yyyy-MM-dd HH:mm:ss
String now = DateUtil.now();
//当前日期字符串,格式:yyyy-MM-dd
String today= DateUtil.today();

2. 时间单位(ms、s)转换


返回目录

long a = 4535345;//结果为:75
long minutes = Convert.convertTime(a, TimeUnit.MILLISECONDS, TimeUnit.MINUTES);

3. 字符串转换为日期


返回目录

// 支持的字符串格式
yyyy-MM-dd HH:mm:ss
yyyy-MM-dd
HH:mm:ss
yyyy-MM-dd HH:mm
yyyy-MM-dd HH:mm:ss.SSS
// 转换方式
String dateStr = "2017-03-01";
Date date = DateUtil.parse(dateStr);

4. 日期转换为字符串


返回目录

String dateStr = "2017-03-01";
Date date = DateUtil.parse(dateStr);//结果 2017/03/01
String format = DateUtil.format(date, "yyyy/MM/dd");//常用格式的格式化,结果:2017-03-01
String formatDate = DateUtil.formatDate(date);//结果:2017-03-01 00:00:00
String formatDateTime = DateUtil.formatDateTime(date);//结果:00:00:00
String formatTime = DateUtil.formatTime(date);

5. 从日期对象中提取出 year month


返回目录

Date date = DateUtil.date();
//获得年的部分
DateUtil.year(date);
//获得月份,从0开始计数
DateUtil.month(date);
//获得月份枚举
DateUtil.monthEnum(date);
//.....

6. 获取日期对象的开始和结束时间(每天或者每月)


返回目录

String dateStr = "2017-03-01 22:33:23";
Date date = DateUtil.parse(dateStr);//一天的开始,结果:2017-03-01 00:00:00
Date beginOfDay = DateUtil.beginOfDay(date);//一天的结束,结果:2017-03-01 23:59:59
Date endOfDay = DateUtil.endOfDay(date);

7. 获取指定date&&偏移量的目标date


返回目录

String dateStr = "2017-03-01 22:33:23";
Date date = DateUtil.parse(dateStr);//结果:2017-03-03 22:33:23
Date newDate = DateUtil.offset(date, DateField.DAY_OF_MONTH, 2);//常用偏移,结果:2017-03-04 22:33:23
DateTime newDate2 = DateUtil.offsetDay(date, 3);//常用偏移,结果:2017-03-01 19:33:23
DateTime newDate3 = DateUtil.offsetHour(date, -3);

8. 时间日期差


返回目录

String dateStr1 = "2017-03-01 22:33:23";
Date date1 = DateUtil.parse(dateStr1);String dateStr2 = "2017-04-01 23:33:23";
Date date2 = DateUtil.parse(dateStr2);//相差一个月,31天
long betweenDay = DateUtil.between(date1, date2, DateUnit.DAY);// 获取时间差的字符串
//Level.MINUTE表示精确到分
String formatBetween = DateUtil.formatBetween(between, Level.MINUTE);
//输出:31天1小时
Console.log(formatBetween);

测试工具


1. 性能测试工具(毫秒计时器工具)


返回目录

TimeInterval timer = DateUtil.timer();//---------------------------------
//-------这是执行过程
//---------------------------------timer.interval();//花费毫秒数
timer.intervalRestart();//返回花费时间,并重置开始时间

2. FileAppender 文件追加操作


返回目录

也就是说,这是一个支持缓存的文件内容追加器。此类主要用于类似于日志写出这类需求所用。

FileAppender appender = new FileAppender(file, 16, true);
appender.append("123");
appender.append("abc");
appender.append("xyz");appender.flush();
appender.toString();

3. 断言工具


返回目录

String a = null;
cn.hutool.lang.Assert.isNull(a);
// 补充
isTrue 是否True
isNull 是否是null值,不为null抛出异常
notNull 是否非null值
notEmpty 是否非空
notBlank 是否非空白符
notContain 是否为子串
notEmpty 是否非空
noNullElements 数组中是否包含null元素
isInstanceOf 是否类实例
isAssignable 是子类和父类关系
state 会抛出IllegalStateException异常

4. 控制台打印输出


返回目录

//推荐创建不可变静态类成员变量
private static final Log log = LogFactory.get();

文件 && IO流


1. 流的获取,流的关闭


返回目录

// 字节流
BufferedInputStream in = FileUtil.getInputStream(B_JDK_8_MD);
BufferedOutputStream out = FileUtil.getOutputStream(B_JDK_8_COPY_MD);
long copySize = IoUtil.copy(in, out, IoUtil.DEFAULT_BUFFER_SIZE);// 字符流
BufferedReader reader = IoUtil.getReader(new FileInputStream(B_JDK_8_MD), "utf-8");
OutputStreamWriter writer = IoUtil.getWriter(new FileOutputStream(B_JDK_8_MD), "utf-8");
IoUtil.copy(reader, writer);
String s;
while ((s = reader.readLine()) != null) {System.out.println(s);
}IoUtil.close(writer);
IoUtil.close(reader);

2. File转换为流


返回目录

File file = new File(B_JDK_8_MD);
BufferedReader reader = IoUtil.getReader(IoUtil.toStream(file), "utf-8");
String s;
while ((s = reader.readLine()) != null) {System.out.println(s);
}

3. 文件操作(CRUD,类型判断)


返回目录

ls 列出目录和文件
touch 创建文件,如果父目录不存在也自动创建
mkdir 创建目录,会递归创建每层目录
del 删除文件或目录(递归删除,不判断是否为空),这个方法相当于Linux的delete命令
copy 拷贝文件或目录
// 部分类型无法判断,例如JSON文件
File file = FileUtil.file("d:/test.jpg");
String type = FileTypeUtil.getType(file);
//输出 jpg则说明确实为jpg文件
Console.log(type);

4. 文件流的二次封装(FileReader,FileWriter)


返回目录

1.1 FileReader

//默认UTF-8编码,可以在构造中传入第二个参数做为编码
FileReader fileReader = new FileReader("test.properties");
String result = fileReader.readString();
// 补充
FileReader提供了以下方法来快速读取文件内容:readBytes
readString
readLines
同时,此类还提供了以下方法用于转换为流或者BufferedReader:getReader
getInputStream

1.2 FileWriter

FileWriter writer = new FileWriter("test.properties");
writer.write("test");
// 补充
同样,此类提供了:getOutputStream
getWriter
getPrintWriter

其他工具


1. 反射工具


返回目录

// 获取方法集合
Method[] methods = ReflectUtil.getMethods(ExamInfoDict.class);
// 获取方法
Method method = ReflectUtil.getMethod(ExamInfoDict.class, "getId");
// 获取实例
ReflectUtil.newInstance(ExamInfoDict.class);
// 执行方法
TestClass testClass = new TestClass();
ReflectUtil.invoke(testClass, "setA", 10);

2. UUID && Snowflake 工具


返回目录

1.1 UUID

//生成的UUID是带-的字符串,类似于:a5c8a5e8-df2b-4706-bea4-08d0939410e3
String uuid = IdUtil.randomUUID();//生成的是不带-的字符串,类似于:b17f24ff026d40949c85a24f4f375d42
String simpleUUID = IdUtil.simpleUUID();

1.2 Snowflake雪花算法生成唯一ID

//参数1为终端ID
//参数2为数据中心ID
Snowflake snowflake = IdUtil.getSnowflake(1, 1);
long id = snowflake.nextId();

3. 正则工具


返回目录

1.1 ReUtil.findAll

String content = "ZZZaaabbbccc中文1234";
List<String> resultFindAll = ReUtil.findAll("\\w{2}", content, 0, new ArrayList<String>());
// 结果:["ZZ", "Za", "aa", "bb", "bc", "cc", "12", "34"]

1.2 ReUtil.isMatch

String content = "ZZZaaabbbccc中文1234";
boolean isMatch = ReUtil.isMatch("\\w+[\u4E00-\u9FFF]+\\d+", content);
Assert.assertTrue(isMatch);

1.3 ReUtil.replaceAll

String content = "ZZZaaabbbccc中文1234";
//此处把1234替换为 ->1234<-
String replaceAll = ReUtil.replaceAll(content, "(\\d+)", "->$1<-");
Assert.assertEquals("ZZZaaabbbccc中文->1234<-", replaceAll);

4. 字符串参数校验工具


返回目录

1.1 非空校验

// 这个对于长度为 1 的集合类型的验证结果是false
// 对于空值字符串 "" 验证结果是true
// 所以我们可以用这个对字符串进行验证
boolean empty = Validator.isEmpty(objects);

1.2 常用正则校验

boolean isEmail = Validator.isEmail("loolly@gmail.com")

1.3 异常校验

Validator.validateChinese("我是一段zhongwen", "内容中包含非中文");

5. BeanUtil不同bean之间进行赋值&&Bean转化为Map


返回目录

1.1 Bean转化为Bean

SubPerson p1 = new SubPerson();
p1.setSlow(true);
p1.setName("测试");
p1.setSubName("sub测试");Map<String, Object> map = MapUtil.newHashMap();BeanUtil.copyProperties(p1, map);

1.2 Bean转化为Map

注意这里不会对null值作额外的处理,如果不想要将null值存入map,需要自行过滤

SubPerson person = new SubPerson();
person.setAge(14);
person.setOpenid("11213232");
person.setName("测试A11");
person.setSubName("sub名字");Map<String, Object> map = BeanUtil.beanToMap(person);

6. JSON工具


返回目录

// JSON -> Bean
String json = "{\n" +"  \"age\": \"0\",\n" +"  \"name\": \"String\"\n" +"}";
Person person1 = JSONUtil.toBean(json, Person.class);
System.out.println(person1);
// Bean -> JSON
JSON person = JSONUtil.parse(new Person(1, "Zhangsan"));
// 打印 json 字符串
System.out.println(person.toJSONString(2));

Excel工具


1. List、Map、Bean 导出Excel


返回目录

1.1 提前说明一下注意点

  • List导出需要列名需要额外添加一个列名集合
  • Bean导出的列名顺序不是根据你的对Bean属性赋值顺序导出的,如果需要按照你赋值顺序导出需要你对列名进行别名
// TODO 叶之越 2020/7/26 9:16 列表生成 xlsx
// 3行数据
List<String> listRow1 = Arrays.asList("a1", "b1", "c1");
List<String> listRow2 = Arrays.asList("a2", "b2", "c2");
List<String> listRow3 = Arrays.asList("a3", "b3", "c3");
// 3行数据封装到一个对象中
List<List<String>> listRows = Arrays.asList(listRow1, listRow2, listRow3);// TODO 叶之越 2020/7/26 9:16 哈希表生成 xlsx
// 第一行数据
Map<String, Object> mapRow1 = new LinkedHashMap<>();
mapRow1.put("姓名", "张三");
mapRow1.put("性别", "女");
mapRow1.put("年龄", 23);
mapRow1.put("学历", "大专");
// 第二行数据
Map<String, Object> mapRow2 = new LinkedHashMap<>();
mapRow2.put("姓名", "李四");
mapRow2.put("性别", "男");
mapRow2.put("年龄", 20);
// 3行数据封装到一个集合中
ArrayList<Map<String, Object>> mapRows = CollUtil.newArrayList(mapRow1, mapRow2);// TODO 叶之越 2020/7/26 9:27 写出Bean数据
// 注意,默认写出bean不会指定顺序,但是指定别名的话就可以指定顺序
// 第一行
TestBean beanRow1 = new TestBean();
beanRow1.setName("张三");
beanRow1.setAge(22);
beanRow1.setPass(true);
beanRow1.setScore(66.30);
beanRow1.setExamDate(DateUtil.date());// 第二行
TestBean beanRow2 = new TestBean();
beanRow2.setName("李四");
beanRow2.setAge(28);
beanRow2.setPass(false);
beanRow2.setScore(38.50);
beanRow2.setExamDate(DateUtil.date());// 封装到一个集合
List<TestBean> beanRows = CollUtil.newArrayList(beanRow1, beanRow2);// 写出文件
ExcelWriter writer = ExcelUtil.getWriter("b:\\test.xlsx");// 写出列表数据
writer.write(listRows, true);
// 写出哈希表数据
writer.passCurrentRow();
writer.write(mapRows, true);
// 写出Bean数据
writer.passCurrentRow();
writer.write(beanRows, true);// TODO 叶之越 2020/7/26 9:30 指定Bean对象的别名,使得这个Excel有顺序
//自定义标题别名
writer.addHeaderAlias("name", "姓名");
writer.addHeaderAlias("age", "年龄");
writer.addHeaderAlias("score", "分数");
writer.addHeaderAlias("isPass", "是否通过");
writer.addHeaderAlias("examDate", "考试时间");// bean设置别名后输出
writer.passCurrentRow();
writer.write(beanRows,true);// 跳过当前行
writer.passCurrentRow();
// 添加标题行
writer.merge(listRow1.size() - 1, "测试标题1");// 刷新内存到硬盘
writer.close();

1.2 Bean对象补充

class TestBean {private String name;private int age;private double score;private boolean isPass;private Date examDate;public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public double getScore() {return score;}public void setScore(double score) {this.score = score;}public boolean isPass() {return isPass;}public void setPass(boolean isPass) {this.isPass = isPass;}public Date getExamDate() {return examDate;}public void setExamDate(Date examDate) {this.examDate = examDate;}
}


2. 客户端下载Excel模板


返回目录

1.1 Controller

/*** @param response: 需要对返回IO流* @description 返回我们 Excel 的模板* @author 叶之越* @email 739153436@qq.com* @date 2020/7/7 15:15*/
@ApiOperation("获取学生的数据模板")
@PostMapping("/getExcelTemplate")
public void getExcelTemplate(HttpServletResponse response) {talentStudentService.getExcelTemplate(response);
}
}

1.2 Service

/*** @param response: 返回输入流* @description 下载我们 Excel 的模板* @author 叶之越* @email 739153436@qq.com* @date 2020/7/7 15:17*/
@Override
public void getExcelTemplate(HttpServletResponse response) {try {// 1 从我们的resource资源目录下面读取对象final ExcelReader reader = ExcelUtil.getReader(this.getClass().getResourceAsStream("/exceltemplate/stu.xlsx"));// 读取Excel为集合对象List<List<Object>> lists = reader.read();ExcelWriter writer = ExcelUtil.getWriter(true);writer.write(lists);response.setHeader("Content-disposition", "attachment;filename=" + URLEncoder.encode("stu.xlsx", "UTF-8"));response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");// 2 写出对象ServletOutputStream out = response.getOutputStream();// 通过Response的IO写出我们的表格对象到客户端writer.flush(out, true);writer.close();IoUtil.close(out);} catch (IOException e) {log.error("EducationServiceImpl [export] 输出到响应流失败", e);throw new BusinessException("导出Excel异常");}
}

3. 客户上传Excel数据,并且存储数据到数据库


返回目录

1.1 Controller

/*** @param file 需要同步学生信息用户的Excel文件* @description 导入查询学生信息* @author 叶之越* @email 739153436@qq.com* @date 2020/7/7 13:50*/
@ApiOperation("通过Excel表导入数据")
@PostMapping("/importStudent")
public ResultBean<Boolean> importStudent(@RequestParam MultipartFile file) {try {return ResultBean.restResult(talentStudentService.getStudentInfos(file.getInputStream()), ErrorCodeInfo.OK);} catch (IOException e) {log.error("EducationController [getEducation] 获取输入流失败", e);throw new BusinessException("获取输入流失败");}
}

1.2 Service

/*** @param inputStream: 输入的 Excel 流* @description 导入我们的Excel数据到数据库* @author 叶之越* @email 739153436@qq.com* @date 2020/7/7 13:46*/
@Override
public Boolean getStudentInfos(InputStream inputStream) {try {final ExcelReader reader = ExcelUtil.getReader(inputStream);List<List<Object>> stuList = reader.read(1);// 需要的结果集合List<TalentStudent> talentStudents = new ArrayList<>();// 准备进行数据疯转的对象TalentStudent talentStudent;// 对一些结果信息进行过滤for (List<Object> objects : stuList) {talentStudent = new TalentStudent();if (objects.get(0) != null) {talentStudent.setName(objects.get(0).toString());}if (objects.get(1) != null) {talentStudent.setGender(objects.get(1).toString());}if (objects.get(2) != null) {talentStudent.setIdCard(objects.get(2).toString());}if (objects.get(3) != null) {talentStudent.setMobile(objects.get(3).toString());}if (objects.get(4) != null) {talentStudent.setEducation(objects.get(4).toString());}talentStudents.add(talentStudent);}// 进行结参数验证talentStudents = TalentStudentValidator.insertByExcelValidate(talentStudents).stream().filter(item -> !Objects.equals(item, null)).collect(Collectors.toList());if (!talentStudents.isEmpty()) {// 首先将表格中所有的id值提取出来List<String> idCardCollect = talentStudents.stream().map(TalentStudent::getIdCard).collect(Collectors.toList());// 查询已经存在的身份证号List<TalentStudent> idCardAlreadyHave = list(Wrappers.<TalentStudent>lambdaQuery().in(TalentStudent::getIdCard, idCardCollect));// 将存在的身份证号过滤出去List<TalentStudent> result = talentStudents.stream().filter(tStudent -> {for (TalentStudent student : idCardAlreadyHave) {if (student.getIdCard().equals(tStudent.getIdCard())) {return false;}}return true;}).collect(Collectors.toList());// 保存结果saveBatch(result);}} catch (Exception e) {log.error("EducationServiceImpl [getEducation] Excel读取失败", e);throw new BusinessException("Excel读取失败");}return true;
}

1.3 Validator

/*** @param talentStudents: Excel 传递过来的对象模型* @description Excel 条件过滤,姓名、身份证不能为空。其他性别不合法默认设置为 男* @author 叶之越* @email 739153436@qq.com* @date 2020/7/7 10:20*/
public static List<TalentStudent> insertByExcelValidate(List<TalentStudent> talentStudents) {for (int i = 0; i < talentStudents.size(); i++) {TalentStudent talentStudent = talentStudents.get(i);// 中国大陆身份证验证// 如果不符合条件,那么直接去除这一条记录if (StringUtils.isEmpty(talentStudent.getIdCard())||!talentStudent.getIdCard().matches("\\d{15}(\\d\\d[0-9xX])?")) {talentStudents.set(i, null);// 如果将字段设置为了null,那么直接跳到下一次的循环continue;}// 如果姓名为空,那么直接设置为空if (StringUtils.isEmpty(talentStudent.getName())||talentStudent.getName().equals("")) {talentStudents.set(i, null);continue;}// 中国大陆手机号码// 如果电话号码不符合要求,直接赋值为空字符串if (StringUtils.isEmpty(talentStudent.getMobile())||!talentStudent.getMobile().matches("1\\d{10}")) {talentStudent.setMobile("");}// 如果教育为空,那么直接设置为空串if (StringUtils.isEmpty(talentStudent.getEducation())) {talentStudent.setEducation("");}// 性别如果不符合规则,那么直接默认设置为未知if (StringUtils.isEmpty(talentStudent.getMobile())||(!talentStudent.getGender().equals("男")&&!talentStudent.getGender().equals("女"))) {talentStudent.setGender("未知");}}return talentStudents;
}

4. 客户下载从数据库生成的Excel表


返回目录

1.1 Controller

/*** @param pageNum       当前页* @param pageSize      页面信息条数* @param response      返回流信息对象* @description 导出学生Excel* @author 叶之越* @email 739153436@qq.com* @date 2020/7/7 13:50*/
@ApiOperation("导出分页学生信息")
@PostMapping("/export")
public void export(Integer pageNum, Integer pageSize,HttpServletResponse response) {talentStudentService.export(pageNum, pageSize, response);
}

1.2 Service

/*** @param pageNum       当前页* @param pageSize      页面信息条数* @param talentStudent 我们导出的学生数据类型* @param response      返回流信息对象* @description 导出学生Excel* @author 叶之越* @email 739153436@qq.com* @date 2020/7/7 13:54*/
@Override
public void export(Integer pageNum, Integer pageSize, TalentStudent talentStudent, HttpServletResponse response) {// 从数据库查出数据对象封装成mapfinal List<Map<String, Object>> educationList = page(new Page<>(pageNum, pageSize), Wrappers.lambdaQuery(talentStudent)).getRecords().stream()// 封装成 Map 并且放入 List.map(item -> {final Map<String, Object> map = new LinkedHashMap<>();// 错误,这里需要根据表中字段名称进行命名map.put("name", item.getName());map.put("gender", item.getGender());map.put("idCard", item.getIdCard());map.put("mobile", item.getMobile());map.put("education", item.getEducation());map.put("remarks", item.getRemarks());return map;}).collect(Collectors.toList());// 准备将数据集合封装成Excel对象ExcelWriter writer = ExcelUtil.getWriter(true);// 通过工具类创建writer并且进行别名writer.addHeaderAlias("name", "姓名");writer.addHeaderAlias("gender", "性别( 0 表示男 , 1 表示 女)");writer.addHeaderAlias("idCard", "身份证");writer.addHeaderAlias("mobile", "电话");writer.addHeaderAlias("education", "个人介绍");writer.addHeaderAlias("remarks", "备注");// 准备将对象写入我们的 Listwriter.write(educationList, true);try {// 获取我们的输出流final OutputStream output = response.getOutputStream();response.setHeader("Content-disposition", "attachment;filename=" + URLEncoder.encode("stu.xlsx", "UTF-8"));response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");writer.flush(output, true);writer.close();// 这里可以自行关闭资源或者写一个关闭资源的工具类IoUtil.close(output);} catch (IOException e) {log.error("EducationServiceImpl [export] 输出到响应流失败", e);throw new BusinessException("导出Excel异常");}
}

5. 样式和其他设置


返回目录

1.1 合并单元格,跳过当前行

// 写出列表数据
// 跳过当前行
writer.passCurrentRow();
// 添加标题行
writer.merge(listRow1.size() - 1, "测试标题1");
writer.write(listRows, true);
// 写出哈希表数据
writer.passCurrentRow();
writer.merge(mapRow1.size() - 1, "测试标题1");
writer.write(mapRows, true);
// 写出Bean数据
writer.passCurrentRow();
writer.merge(4, "测试标题1");
writer.write(beanRows, true);

1.2 设置多张表

// 写出列表数据
writer.setSheet("表1");
writer.write(listRows, true);
// 写出哈希表数据
writer.setSheet("表2");
writer.write(mapRows, true);
// 写出Bean数据
writer.setSheet("表3");
writer.write(beanRows, true);

1.3 属性设置

// TODO 叶之越 2020/7/26 10:09 设置单元格样式
StyleSet style = writer.getStyleSet();
// 表的背景颜色
style.setBackgroundColor(IndexedColors.YELLOW, true);
// 字体
Font font = writer.createFont();
font.setBold(true);
font.setColor(Font.COLOR_RED);
font.setItalic(true);
style.setFont(font, true);
// 单元格样式设置
CellStyle cellStyle = writer.getCellStyle();
cellStyle.setAlignment(HorizontalAlignment.RIGHT);

1.4 补充:设置自动调整单元格宽度

/*** 设置所有列为自动宽度,不考虑合并单元格<br>* 此方法必须在指定列数据完全写出后调用才有效。<br>* 列数计算是通过第一行计算的* * @return this* @since 4.0.12*/
public ExcelWriter autoSizeColumnAll() {final int columnCount = this.getColumnCount();for (int i = 0; i < columnCount; i++) {autoSizeColumn(i);}return this;
}

6. 读取Excel表操作


返回目录

ExcelReader reader = ExcelUtil.getReader("d:/aaa.xlsx");
List<List<Object>> readAll = reader.read();
ExcelReader reader = ExcelUtil.getReader("d:/aaa.xlsx");
List<Map<String,Object>> readAll = reader.readAll();
ExcelReader reader = ExcelUtil.getReader("d:/aaa.xlsx");
List<Person> all = reader.readAll(Person.class);

Hutool常用工具相关推荐

  1. Hutool常用工具类

    Hutool常用工具类 介绍 安装 1. maven 2. gradle 常用工具类 1. 类型转换工具类-Convert 2. 日期时间工具-DateUtil 转换 字符串转日期 格式化日期输出 获 ...

  2. 常用工具类 (三) : Hutool 常用工具类整理 (全)

    文章目录 官方文档 一.基础工具类 StrUtil / StringUtils 字符串工具类 DateUtil 日期工具类 NumberUtil 数字工具类 BeanUtil JavaBean工具类 ...

  3. java常用工具类和Hutool常用的工具类整理

    java常用工具类和Hutool常用的工具类整理 1.java常用工具类 1.1 Scanner类 /*** Scanner 类*/@Testpublic void testScanner() {Sc ...

  4. Hutool(Excel工具使用)

    Hutool(Excel工具使用) 官方文档Hutool 目录: 基本依赖的导入 Writer方法的使用 1.1 写出List数据 1.2 写出Map数据 1.3 写出我们的Bean对象 1.4 自定 ...

  5. Java常用工具类库

    Java常用工具类库 1. java自带工具方法 2. apache commons工具类库 2.1 commons-lang,java.lang的增强版 2.2 commons-collection ...

  6. 工具类系列---【金融常用工具类】

    工具类代码 import java.math.BigDecimal; import java.text.DecimalFormat;/*** 金融常用工具类*/ public class NumFor ...

  7. 一些常用工具地址,随时更新中~

    2019独角兽企业重金招聘Python工程师标准>>> 一些常用工具地址的备份: 一款比较全的先到化界面编辑器Neditor:https://gitee.com/notadd/ned ...

  8. aes离线解密工具_CTF常用工具、网站、练习平台

    常用工具网站  CTFtools  比较全的工具下载网站,提供百度云链接  BUUCTF  比较全的工具下载网站,提供百度云链接  XSS 之旅  xss 攻击练习网站,闯关式设计,难度递增  too ...

  9. 西湖大学鞠峰组:环境宏病毒组学分析思路与常用工具

    环境宏病毒组学分析思路与常用工具 袁凌1, 2,倪艳4,鞠峰1, 2, 3 * 1 浙江省海岸带环境与资源研究重点实验室,工学院, 西湖大学, 杭州, 浙江 2  前沿技术研究所, 浙江西湖高等研究院 ...

  10. 自动化测试现状趋势解读,附带近年自动化测试常用工具

    前几天在知乎上写了一篇文章和网友们一起探讨自动化测试,其中就有一个网友给我的回复我印象很深刻.他说做测试好像要什么内容都需要会,太累了.今天我就这个问题来给大家介绍一下自动化测试的常用工具以及自动化测 ...

最新文章

  1. 输入十个学生的成绩,判断及格不及格人数,得到不及格人的学号
  2. Java编程基础10——面向对象_多态抽象类接口
  3. python中x y 1_Python的X[y==1, 0]
  4. Mac下安装caffe(cpu-only)
  5. Python批量拆分Excel文件中已合并的单元格
  6. solr.Net课程二 solr5.5之core配置
  7. 基于赫优讯netX芯片PROFINET IO设备的开发
  8. AirServer第三方投屏软件v7.3.0中文版 (Airplay终端实用工具)
  9. 如何批量从多个 Word 文档中提取图片
  10. java中实现正态分布
  11. Python爬虫——爬取豆瓣VIP书籍信息并存入数据库
  12. Electron环境搭建-Mac以及URL Schemes启动
  13. 闲聊人工智能产品经理(AIPM)—方法论
  14. 联发科:心态决定未来走势
  15. 北大暑期学校学习总结
  16. Solr - DIH详解(上卷)
  17. 普通路由器原来可以刷第三方的固件
  18. 学习笔记存款利息计算
  19. c语言分蛋糕均匀正方形,分蛋糕(C - 二分查找)
  20. 35岁前多用利弊分析,35岁后要有“安全边际”

热门文章

  1. 最新Everest 企业版(AIDA64)使用SQL保存数据的方法介绍
  2. FFMPEG之海康实时回调出来的PS流格式
  3. Google地图下载器制作
  4. QT+SQL Server实现车辆管理系统 -代码具体实现
  5. 地砖中间高四边低_客厅棚顶有黑镜在风水里讲怎么样 装修中橱柜里的白色色块用哪个做,怎么施工...
  6. Windows server资源分享
  7. 今天微软开放了WPF的参考源代码(081026更新)
  8. python绘图代码大全_python绘图代码总结
  9. 以现在的眼光来看,Windows 95是怎样的操作系统?
  10. java检测网站死链,网站死链检测工具