file工具类
import java.io.File;
import java.io.InputStream;
public class FileUtil {
public static InputStream getResourcesFileInputStream(String fileName) {
return Thread.currentThread().getContextClassLoader().getResourceAsStream("" + fileName);
}
public static String getPath() {
return FileUtil.class.getResource("/").getPath();
}
public static File createNewFile(String pathName) {
File file = new File(getPath() + pathName);
if (file.exists()) {
file.delete();
} else {
if (!file.getParentFile().exists()) {
file.getParentFile().mkdirs();
}
}
return file;
}
public static File readFile(String pathName) {
return new File(getPath() + pathName);
}
}
业务中代码,后续用到直接模仿即可
/**
* 导出 学生信息表
*/
@GetMapping("export-studentInfo")
@ApiOperationSupport(order = 13)
@ApiOperation(value = "导出", notes = "传入学生信息表")
public void exportStudentInfo(@ApiIgnore @RequestParam Map<String, Object> student_info, HttpServletResponse response) throws Exception {
Long id = Long.parseLong(student_info.get("id")+"");
//查询此学员信息
StudentInfoEntity studentInfoEntity = student_infoService.getById(id);
//判断是否为空
if (!EmptyUtil.isEmpty(studentInfoEntity.getGraduationTime())){
studentInfoEntity.setGraduationTimeTwo((studentInfoEntity.getGraduationTime()+"").substring(0,10));
}
List<Map> kindreds = new ArrayList<>();
List<Map> learns = new ArrayList<>();
List<Map> jobs = new ArrayList<>();
//判断是否为空
if (!EmptyUtil.isEmpty(studentInfoEntity.getKindred())){
//获取直系亲属信息
kindreds = JSON.parseObject(studentInfoEntity.getKindred(), new TypeReference<ArrayList<Map>>() {});
}
if (!EmptyUtil.isEmpty(studentInfoEntity.getLearn())){
learns = JSON.parseObject(studentInfoEntity.getLearn(), new TypeReference<ArrayList<Map>>() {});
//数据转换
for (Map learn : learns) {
List learnTime = (List) learn.get("learnTime");
String learnStart = (String) learnTime.get(0);
String learnEnd = (String) learnTime.get(1);
String learnStartString = learnStart.substring(0, 7);
String learnEndString = learnEnd.substring(0, 7);
learn.remove("learnTime");
learn.put("learnTime",learnStartString+"~"+learnEndString);
}
}
if (!EmptyUtil.isEmpty(studentInfoEntity.getJob())){
jobs = JSON.parseObject(studentInfoEntity.getJob(), new TypeReference<ArrayList<Map>>() {});
for (Map job : jobs) {
List jobTime = (List) job.get("jobTime");
String jobStart = (String) jobTime.get(0);
String jobEnd = (String) jobTime.get(1);
String jobStartString = jobStart.substring(0, 7);
String jobEndString = jobEnd.substring(0, 7);
job.remove("jobTime");
job.put("jobTime",jobStartString+"~"+jobEndString);
job.put("jobWorkplace",job.get("kindredWorkplace"));
job.put("jobOffice",job.get("kindredOffice"));
job.remove("kindredWorkplace");
job.remove("kindredOffice");
}
}
InputStream inputStream = FileUtil.class.getClassLoader().getResourceAsStream("MODEL.xls");
response.setContentType("application/vnd.ms-excel");
response.setCharacterEncoding(Charsets.UTF_8.name());
String fileName = URLEncoder.encode(studentInfoEntity.getStudentName()+"个人简历--" + DateUtil.time(), Charsets.UTF_8.name());;
response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xls");
ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream()).withTemplate(inputStream)
.registerWriteHandler(new ImageCellWriteHandler())
.excelType(ExcelTypeEnum.XLS)
.build();
WriteSheet writeSheet = EasyExcel.writerSheet().build();
// 这里注意 入参用了forceNewRow 代表在写入list的时候不管list下面有没有空行 都会创建一行,然后下面的数据往后移动。默认 是false,会直接使用下一行,如果没有则创建。
// forceNewRow 如果设置了true,有个缺点 就是他会把所有的数据都放到内存了,所以慎用
// 简单的说 如果你的模板有list,且list不是最后一行,下面还有数据需要填充 就必须设置 forceNewRow=true 但是这个就会把所有数据放到内存 会很耗内存
// 如果数据量大 list不是最后一行 参照下一个
FillConfig fillConfig = FillConfig.builder().forceNewRow(Boolean.FALSE).build();;
excelWriter.fill(new FillWrapper("kindreds", kindreds),fillConfig, writeSheet);
excelWriter.fill(new FillWrapper("jobs", jobs),fillConfig, writeSheet);
excelWriter.fill(new FillWrapper("learns", learns),fillConfig, writeSheet);
String img = studentInfoEntity.getImg();
if (!EmptyUtil.isEmpty(img)){
String[] split = img.split("/");
ApplicationHome h = new ApplicationHome(getClass());
File jarF = h.getSource();
String path = jarF.getParentFile().toString();
int i = path.lastIndexOf("/");
if (i > 0) {
path = path.substring(0,i+1);
}
System.out.println(path);
HttpUtil.downloadFileFromUrl(img, path);
// 填充图片
File file = new File(path+File.separator+split[6]);
// 注意:这里需要回原来的key里
studentInfoEntity.setImgs(FileUtils.readFileToByteArray(file));
//删除文件
file.delete();
}
excelWriter.fill(studentInfoEntity,fillConfig, writeSheet);
excelWriter.finish();
}