import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid;
import java.io.File;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
/**
-
@description:
-
@author: alan
-
@time: 2021/7/23 18:08
*/
@Controller
@RequestMapping(“/api”)
public class TestJxl {
private final Logger log = LoggerFactory.getLogger(TestJxl .class);
private ExcelService excelService = new ExcelJxlServiceImpl();
@Autowired
private ObjectMapper objectMapper;
@PostMapping(“/test/exportExcel”)
@ApiOperation(value = “导出Excel”)
public void exportExcel(HttpServletResponse response, HttpServletRequest request) {
excelService.export(response, request);
}
@PostMapping(“/test/importExcel”)
@ApiOperation(value = “导入Excel”)
public ResponseEntity importFile(@RequestParam(“file”) MultipartFile multipartFile) {
try {
String types = multipartFile.getContentType();
InputStream inputStream = multipartFile.getInputStream();
File file = new File(multipartFile.getOriginalFilename());
List fileContents = new ArrayList();
if (multipartFile.getOriginalFilename().contains(“xls”)) {
fileContents = excelService.importExcel(“xls”, inputStream);
} else if (multipartFile.getOriginalFilename().contains(“csv”)) {
fileContents = excelService.importExcel(“csv”, inputStream);
}
String json = objectMapper.writeValueAsString(fileContents);
log.info(“导入的数据:{}”, json);
} catch (Throwable t) {
t.printStackTrace();
}
return new ResponseEntity<>(null, null, HttpStatus.OK);
}
}
接口类
package com.mycompany.myapp.service.test;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.InputStream;
import java.util.List;
/**
-
@description:
-
@author: alan
-
@time: 2021/7/25 21:33
*/
public interface ExcelService {
void export(HttpServletResponse response, HttpServletRequest request);
List importExcel(String type, InputStream inputStream);
}
接口实现类
package com.mycompany.myapp.service.test.impl;
import com.mycompany.myapp.service.test.ExcelService;
import com.mycompany.myapp.util.DownloadFileUtil;
import com.mycompany.myapp.util.JxlUtil;
import com.mycompany.myapp.web.rest.vm.LoginVM;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
/**
-
@description:
-
@author: alan
-
@time: 2021/7/25 21:38
*/
public class ExcelJxlServiceImpl implements ExcelService {
/**
- 导出excel
*/
@Override
public void export(HttpServletResponse response, HttpServletRequest request) {
// 文件新名
String newFileName = “UserInfo.xls”;
String pathName = “D:/usr/” + newFileName;
String title[] = {“账号”, “密码”, “登记”};
LoginVM loginOne = new LoginVM();
loginOne.setUsername(“小米”);
loginOne.setPassword(“123”);
loginOne.setRememberMe(true);
LoginVM loginTwo = new LoginVM();
loginTwo.setUsername(“小明”);
loginTwo.setPassword(“123”);
loginTwo.setRememberMe(false);
List list = new ArrayList<>();
list.add(loginOne);
list.add(loginTwo);
//文件保存在指定位置
JxlUtil.exportExcel(pathName, title, list);
//获取文件流返回给客户端
DownloadFileUtil.downloadFile(response, request, pathName);
}
/**
-
导入
-
@param type
-
@param inputStream
-
@return
*/
@Override
public List importExcel(String type, InputStream inputStream) {
List list = new ArrayList();
if (type.equals(“xls”)) {
list = JxlUtil.xlsContent(inputStream);
} else {
list = JxlUtil.csvContent(inputStream);
}
return list;
}
}
jxl工具类
package com.mycompany.myapp.util;
import jxl.Sheet;
import jxl.Workbook;
import jxl.format.Alignment;
import jxl.format.Border;
import jxl.format.BorderLineStyle;
import jxl.format.VerticalAlignment;
import jxl.read.biff.BiffException;
import jxl.write.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.*;
import java.lang.reflect.Field;
import java.math.BigDecimal;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.List;
/**
-
@description:
-
@author: alan
-
@time: 2021/7/23 18:26
*/
public class JxlUtil {
/**
-
导出Excel
-
@param fileName 文件地址名称
-
@param Title 导出excel的标题
-
@param listContent 导出的list
-
@return
*/
public final static boolean exportExcel(String fileName, String[] Title, List<?> listContent) {
final Logger logger = LoggerFactory.getLogger(JxlUtil.class);
WritableWorkbook workbook = null;
// 以下开始输出到EXCEL
try {
String filePathName = fileName.substring(0,fileName.lastIndexOf(“/”));
File f = new File(filePathName);
if(!f.exists()){
f.mkdirs();//创建目录
}
// 创建可写入的Excel工作簿
File file = new File(fileName);
if (!file.exists()) {
boolean bool = file.createNewFile();
logger.info(“创建Excel工作簿结果”,bool);
}
/** 创建工作簿** */
workbook = Workbook.createWorkbook(file);
/** 创建工作表** */
WritableSheet sheet = workbook.createSheet(“Sheet1”, 0);
/** 设置纵横打印(默认为纵打)、打印纸******* */
jxl.SheetSettings sheetset = sheet.getSettings();
sheetset.setProtected(false);
/** 设置单元格字体** */
WritableFont NormalFont = new WritableFont(WritableFont.ARIAL, 10);
WritableFont BoldFont = new WritableFont(WritableFont.ARIAL, 10, WritableFont.BOLD);
/** 以下设置三种单元格样式,灵活备用 */
// 用于标题居中
WritableCellFormat wcf_center = new WritableCellFormat(BoldFont);
wcf_center.setBorder(Border.ALL, BorderLineStyle.THIN); // 线条
wcf_center.setVerticalAlignment(VerticalAlignment.CENTRE); // 文字垂直对齐
wcf_center.setAlignment(Alignment.CENTRE); // 文字水平对齐
wcf_center.setWrap(false); // 文字是否换行
// 用于正文居左
WritableCellFormat wcf_left = new WritableCellFormat(NormalFont);
wcf_left.setBorder(Border.NONE, BorderLineStyle.THIN); // 线条
wcf_left.setVerticalAlignment(VerticalAlignment.CENTRE); // 文字垂直对齐
wcf_left.setAlignment(Alignment.LEFT); // 文字水平对齐
wcf_left.setWrap(false); // 文字是否换行
/** 以下是EXCEL开头大标题,暂时省略****** */
// sheet.mergeCells(0, 0, colWidth, 0);
// sheet.addCell(new Label(0, 0, “XX报表”, wcf_center));
/** 以下是EXCEL第一行列标题****** */
for (int i = 0; i < Title.length; i++) {
sheet.addCell(new Label(i, 0, Title[i], wcf_center));
}
/** 以下是EXCEL正文数据****** */
Field[] fields = null;
int i = 1;
for (Object obj : listContent) {
fields = obj.getClass().getDeclaredFields();
int j = 0;
for (Field v : fields) {
v.setAccessible(true);
Object va = v.get(obj);
if (va == null) {
va = “”;
}
if (va.getClass().getSimpleName().equals(“Double”)) {
sheet.addCell(new Label(j, i, BigDecimal.valueOf((Double) va) + “”, wcf_left));
} else if (va.getClass().getSimpleName().equals(“Float”)) {
Double vDouble = ((Float) va).doubleValue();
sheet.addCell(new Label(j, i, new BigDecimal(new DecimalFormat(“#.00”).format(vDouble)) + “”,
wcf_left));
} else {
sheet.addCell(new Label(j, i, va.toString() + “”, wcf_left));
}
j++;
}
i++;
}
/** **将以上缓存中的内容写到EXCEL文件中 */
workbook.write();
} catch (Throwable t) {
logger.error(“系统提示:Excel文件导出失败,原因:”,t.getMessage());
t.printStackTrace();
}finally {
try {
/** 关闭文件**** */
workbook.close();
}catch (Exception e){
logger.error(“系统提示:关闭文件失败,原因:”,e.getMessage());
}
}
return true;
}
/**
-
获取CSV文件中的内容
-
@param inputStream
-
@return
*/
public static List csvContent(InputStream inputStream) {
List allString = new ArrayList<>();
if (inputStream != null) {
InputStreamReader inputStreamReader;
BufferedReader br = null;
//FileInputStream fins = new FileInputStream(csv);
try {
inputStreamReader = new InputStreamReader(inputStream, “GBK”);
br = new BufferedReader(inputStreamReader);
String line = “”;
String everyLine = “”;
while ((line = br.readLine()) != null) { // 读取到的内容给line变量
everyLine = line + " ,";
allString.add(everyLine);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
br.close();
}catch (Exception e){
e.printStackTrace();
}
}
}
return allString;
}
/**
-
获取xls文件中的内容
-
@param inputStream
-
@return
*/
public static List xlsContent(InputStream inputStream) {
List allString = new ArrayList();
try {
// 创建输入流,读取Excel
//InputStream is = new FileInputStream(xls.getAbsolutePath());
// jxl提供的Workbook类
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)
![img](https://img-blog.csdnimg.cn/img_convert/141ea8a1527a4eedc33a12932d9054ff.jpeg)
总结
上述知识点,囊括了目前互联网企业的主流应用技术以及能让你成为“香饽饽”的高级架构知识,每个笔记里面几乎都带有实战内容。
很多人担心学了容易忘,这里教你一个方法,那就是重复学习。
打个比方,假如你正在学习 spring 注解,突然发现了一个注解@Aspect,不知道干什么用的,你可能会去查看源码或者通过博客学习,花了半小时终于弄懂了,下次又看到@Aspect 了,你有点郁闷了,上次好像在哪哪哪学习,你快速打开网页花了五分钟又学会了。
从半小时和五分钟的对比中可以发现多学一次就离真正掌握知识又近了一步。
人的本性就是容易遗忘,只有不断加深印象、重复学习才能真正掌握,所以很多书我都是推荐大家多看几遍。哪有那么多天才,他只是比你多看了几遍书。
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)**
![img](https://img-blog.csdnimg.cn/img_convert/141ea8a1527a4eedc33a12932d9054ff.jpeg)
总结
上述知识点,囊括了目前互联网企业的主流应用技术以及能让你成为“香饽饽”的高级架构知识,每个笔记里面几乎都带有实战内容。
很多人担心学了容易忘,这里教你一个方法,那就是重复学习。
打个比方,假如你正在学习 spring 注解,突然发现了一个注解@Aspect,不知道干什么用的,你可能会去查看源码或者通过博客学习,花了半小时终于弄懂了,下次又看到@Aspect 了,你有点郁闷了,上次好像在哪哪哪学习,你快速打开网页花了五分钟又学会了。
从半小时和五分钟的对比中可以发现多学一次就离真正掌握知识又近了一步。
[外链图片转存中…(img-oaLxM4yr-1713293981350)]
人的本性就是容易遗忘,只有不断加深印象、重复学习才能真正掌握,所以很多书我都是推荐大家多看几遍。哪有那么多天才,他只是比你多看了几遍书。
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!