EasyExcel工具类

校验上传的文件是否是Excel文件及是否是xls或xlsx格式工具类

import org.apache.poi.poifs.filesystem.FileMagic;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.multipart.MultipartFile;

import java.io.InputStream;
import java.util.Objects;

public class EasyExcelUtil {
    private static final Logger logger = LoggerFactory.getLogger(EasyExcelUtil.class);

    /**
     * 校验上传的文件是否是Excel文件及是否是xls或xlsx格式
     *
     * @param file
     * @return
     * @throws Exception
     */
    private static Boolean checkExcelFile(MultipartFile file) throws Exception {

        Boolean result = false;

        try {
            //校验文件名称
            String fileName = file.getOriginalFilename();
            if (fileName == null) {
                logger.error("fileName is null");
                throw new Exception("未获取到文件名");
            }
            //校验文件后缀名
            String fileSuffixName = fileName.substring(fileName.lastIndexOf(".") + 1);
            if (fileSuffixName == null) {
                logger.error("Illegal file");
                throw new Exception("非法文件");
            }
            //校验文件后缀名是否为xls或者xlsx格式
            if (!"xls".equals(fileSuffixName) && !"xlsx".equals(fileSuffixName)) {
                logger.error("file format error,please upload an Excel file in xls or xlsx format");
                throw new Exception("文件格式错误,请上传xls或xlsx格式的Excel文件");
            }
            //根据Excel魔数判断该文件是否为Excel文件
            InputStream inputStream = file.getInputStream();
            InputStream fileMagics = FileMagic.prepareToCheckMagic(inputStream);
            FileMagic fileMagic = FileMagic.valueOf(fileMagics);

            //FileMagic.OLE2表示xls格式 FileMagic.OOXML表示xlsx格式
            if (Objects.equals(fileMagic, FileMagic.OLE2) || Objects.equals(fileMagic, FileMagic.OOXML)) {
                result = true;
            } else {
                logger.error("file format error,please upload an Excel file in xls or xlsx format");
                throw new Exception("文件格式错误,请上传xls或xlsx格式的Excel文件");
            }
        } catch (Exception e) {
            logger.error("请上传xls或xlsx格式的Excel文件", e);
            throw e;
        }
        return result;
    }
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
EasyExcel 是一个基于 Java 的简单、高效、无侵入的 Excel 文件读写工具包,可以快速方便地实现 Excel 文件的读写操作。下面是一个 easyexcel 工具类的示例: ```java public class ExcelUtil { /** * 读取 Excel 文件内容 * * @param inputStream Excel 文件输入流 * @param clazz 数据模型类 * @return 读取结果 */ public static <T> List<T> readExcel(InputStream inputStream, Class<T> clazz) { List<T> dataList = new ArrayList<>(); try { // 创建读取 Excel 文件的工作簿对象 ExcelReader excelReader = new ExcelReader(inputStream, null, new AnalysisEventListener<T>() { @Override public void invoke(T data, AnalysisContext context) { // 读取到一行数据时的回调方法 dataList.add(data); } @Override public void doAfterAllAnalysed(AnalysisContext context) { // 读取结束时的回调方法 } }); // 读取 Excel 文件中的数据并转换为指定的数据模型类 excelReader.read(new Sheet(1, 1, clazz)); } catch (Exception e) { e.printStackTrace(); } return dataList; } /** * 写入数据到 Excel 文件 * * @param outputStream Excel 文件输出流 * @param dataList 数据列表 * @param clazz 数据模型类 */ public static <T> void writeExcel(OutputStream outputStream, List<T> dataList, Class<T> clazz) { try { // 创建写入 Excel 文件的工作簿对象 ExcelWriter excelWriter = new ExcelWriter(outputStream, ExcelTypeEnum.XLSX); // 创建写入 Excel 文件的 sheet 对象 Sheet sheet = new Sheet(1, 0, clazz); // 写入数据到 Excel 文件 excelWriter.write(dataList, sheet); // 关闭写入 Excel 文件的工作簿对象 excelWriter.finish(); } catch (Exception e) { e.printStackTrace(); } } } ``` 使用示例: ```java // 读取 Excel 文件 List<User> userList = ExcelUtil.readExcel(new FileInputStream("user.xlsx"), User.class); // 写入数据到 Excel 文件 List<User> userList = new ArrayList<>(); userList.add(new User("张三", 30, "男")); userList.add(new User("李四", 25, "女")); ExcelUtil.writeExcel(new FileOutputStream("user.xlsx"), userList, User.class); ``` 其中 `User` 类为数据模型类,示例代码如下: ```java public class User { private String name; private Integer age; private String gender; public User() { } public User(String name, Integer age, String gender) { this.name = name; this.age = age; this.gender = gender; } // getter 和 setter 方法省略 } ``` 以上代码仅为示例,具体的应用场景中可能需要根据实际需求进行适当的修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值