java如何直接读取excel文件进行增删改查操作

首先先创建一个文件路径类,用来放置文件的位置

package com.ruoyi.web.core.config;import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;/*** fileConfig.properties文件配置信息*/
@Configuration
@ConfigurationProperties(prefix = "config", ignoreUnknownFields = false)
@PropertySource("classpath:fileConfig.properties")
@Data
public class FileConfigProperties {/*** 文件存储位置配置*/private String filePath;
}

获取到文件储位置后,就可以进行用文件操作类进行操作,这里可以用若依框架里面自带的,或者使用hutool工具,也可以

在这里我自己写了一个工具类, 可以参考一下,就是把读取的文件用Redis进行缓存,根据文件最后的修改时间和文件名作为Key值进行存储 和查询,这样的话就可以保证查询速率,只有在第一次加载的时候,比较慢,后面的话,如果不改动文件内容的话,之后用的都是redis里面缓存的值.     

这个工具类如下: 

package com.ruoyi.web.controller.tool;import com.ruoyi.common.core.redis.RedisCache;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.system.domain.enumVo.FileNameVo;
import com.ruoyi.web.core.config.FileConfigProperties;
import org.springframework.stereotype.Component;
import org.springframework.util.ResourceUtils;import javax.annotation.Resource;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.Collection;
import java.util.List;@Component
public class FileDataUtil {@ResourceFileConfigProperties fileConfigProperties;@ResourceRedisCache redis;/*** 读取Excel文件数据** @param fileNameVo 文件类型* @return 文件数据* @throws FileNotFoundException 文件不存在*/public List<?> getFileDataList(FileNameVo fileNameVo) throws FileNotFoundException {String fileName = fileNameVo.getFileName();File file = ResourceUtils.getFile(fileConfigProperties.getFilePath() + fileName);String fileLastTime = String.valueOf((file.lastModified()));String dataListKey = fileName + "Data";if (!redis.hasKey(fileName) || !redis.getCacheObject(fileName).equals(fileLastTime)) {redis.setCacheObject(fileName, fileLastTime);FileInputStream fileInputStream = new FileInputStream(file);ExcelUtil<?> util = new ExcelUtil<>(fileNameVo.getEntityClass());List<?> dataList = util.importExcel(fileInputStream);if (!dataList.isEmpty()) redis.setCacheObject(dataListKey, dataList);return dataList;} else {return redis.getCacheObject(dataListKey);}}/*** 加载数据** @param dataList 数据集* @param file     文件*/public <T> void loadData(List<T> dataList, FileNameVo file) throws Exception {if (dataList.isEmpty()) {try {dataList.addAll((Collection<? extends T>) getFileDataList(file));} catch (Exception e) {throw new FileNotFoundException("加载文件数据时发生错误: " + e.getMessage());}if (dataList.isEmpty()) {throw new FileNotFoundException("文件数据为空");}}}
}

这个工具类可以适用不同的类型,也就是List<?>这种  使用的时候直接传入你需要读取的文件,和相对应接收的 List<自定义实体类> 数据集

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

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

相关文章

巩固学习7

正则表达式 就是用来找到符合模式的字符串&#xff0c;这些模式包括&#xff1a;是什么字符&#xff0c;重复多少次&#xff0c;在什么位置&#xff0c;有哪些额外的约束 找某个字符串 import re text身高:178 体重:168 学号:123456 密码:9527 #在Python中&#xff0c;r前缀用…

登录uniapp存入token方便其他页面用

// 登录函数 function login(username, password) {// 假设这是你的登录接口const loginUrl https://your-api-domain.com/login;// 使用uni.request发送登录请求uni.request({url: loginUrl,method: POST,data: {username: username,password: password},success: (res) >…

数据库种类

关系型数据库是目前应用最广泛的数据库类型。它诞生于1969年&#xff0c;并采用由行和列组成的二维表来管理数据&#xff0c;这种结构与Excel工作表相似&#xff0c;因此易于理解和使用。关系型数据库主要使用SQL&#xff08;结构化查询语言&#xff09;来进行数据操作。传统的…

BFD双向转发检测

BFD概述 Bidirectional Forwarding Detection &#xff1a;双向转发检测 BFD技术背景 现网中存在的问题 不能快速有效的发现网络设备或链路中出现的故障不能以毫秒级的速度发现网络中的问题协议自身的报文检测机制一般都大于1秒 解决方案&#xff1a; 需要一种专门用于快…

【脚本】使用脚本备份docker中部署的mysql数据库

v1版本明文密码方式&#xff1a; #!/bin/bash# 定义 MySQL 容器名称和数据库信息 container_name"mysql_container" db_user"root" db_password"your_password"# 定义要备份的数据库列表 databases("database1" "database2"…

cannot find symbol [ERROR] symbol: class BASE64Decoder报错解决(亲测可用)

在用Jenkins部署项目的时候&#xff0c;控制台突然报了如下错误&#xff1a; cannot find symbol symbol: class BASE64Decoder location: package sun.misc [INFO] 1 error BUILD FAILURE Total time: 16.117 s 解决方案&#xff1a; java包引入&#xff1a; import su…

阿赵UE引擎C++编程学习笔记——字符串操作

大家好&#xff0c;我是阿赵   之前在介绍了UE的log打印。打印输入的参数是字符串。这里来学习一下&#xff0c;UE里面字符串有哪些类型&#xff0c;还有一些常用的字符串处理方法。 一、 FName、FString、FText 1、 三种格式的介绍 在打印方法里面&#xff0c;输入的字符串…

Outlook的IMAP服务器怎么填写?填写步骤?

Outlook的IMAP服务器如何使用&#xff1f;服务器地址怎么查找&#xff1f; 当我们在Outlook中设置新的电子邮件账户时&#xff0c;经常会遇到一个问题&#xff1a;Outlook的IMAP服务器怎么填写呢&#xff1f;接下来&#xff0c;AokSend将详细解答这个问题&#xff0c;并帮助大…

Dive into Deep Learning-优化算法(2)

梯度下降 为什么梯度下降可以优化目标函数&#xff1a;以一维梯度下降为例 f : R → R f:\mathbb{R}\rightarrow\mathbb{R} f:R→R&#xff0c;利用泰勒展开&#xff0c;可以得到&#xff1a; f ( x ϵ ) f ( x ) ϵ f ′ ( x ) O ( ϵ 2 ) f(x \epsilon) f(x) \epsilo…

400元已到账,成交从认真开始

昨天发了一个值班的需求&#xff0c;收到了很多好友的响应&#xff0c;这里非常感谢关注创业程序员卡酷的老朋友、新朋友。今天分享一下&#xff1a;拓展、合作、成交 现在不管是IT行业还是其他行业&#xff0c;大环境可谓一片惨淡&#xff0c;35乃至30找不到工作的失业人员一抓…

深度论证-高速走线控制100欧姆阻抗一定是最好的选择吗?

高速先生成员--黄刚 对于高速差分信号到底需要控制多少欧姆的阻抗&#xff0c;高速先生相信大部分工程师首先都会看下例如信号的协议文档或者芯片的文档&#xff0c;看看里面有没有推荐的控制阻抗值。例如像PCIE信号&#xff0c;在4.0之后的阻抗会明确要求按照85欧姆来控制&…

4.Jmeter阶梯加压Stepping Thread Group

1. 先去Jmeter下载地址下载PluginsManager&#xff0c;放置在Jmeter的lib/ext 目录下 &#xff0c;重启Jmeter 2. 在插件管理器查找并安装jpgc - Standard Set,重启Jmeter 3.右键测试计划->添加->Threads(Users)->jpgc - Stepping Thread Group 然后设置阶梯加压参数…

SAP_ABAP_快速了解_指针

首先abap里有下面几种数据类型 变量&#xff0c;结构和内表 来看下面的比喻&#xff1a; 变量 房间 结构 平房&#xff08;里面有很多房间&#xff1b;是一户人家&#xff09; 内表 楼房&#xff08;有很多层&#xff0c;每层有很多户人家&#xff0c;每户人家又有很多…

贷款没有逾期,征信没问题,为什么大数据信用评分低呢?

大数据信用在金融贷前风控越来越重要&#xff0c;这让不少人开始关心自己的大数据信用了&#xff0c;其中就有不少人有疑问&#xff0c;那就是自己网贷没有逾期&#xff0c;征信记录也还可以&#xff0c;为什么大数据信用评分低呢?这个问题也是不少人都想知道的&#xff0c;小…

鸿蒙开发之跨设备文件访问

分布式文件系统为应用提供了跨设备文件访问的能力&#xff0c;开发者在多个设备安装同一应用时&#xff0c;通过基础文件接口&#xff0c;可跨设备读写其他设备该应用分布式文件路径&#xff08;/data/storage/el2/distributedfiles/&#xff09;下的文件。 例如&#xff1a;多…

Codeforces Round 925 (Div. 3) D. Divisible Pairs(数学)

波利卡普有两个最喜欢的整数 x 和 y (它们可以相等)&#xff0c;他找到了一个长度为 n 的数组 a 。 波利卡普认为一对索引 ⟨ i , j ⟩ ( 1 ≤ i < j ≤ n ) ⟨i,j⟩ ( 1≤i<j≤n ) ⟨i,j⟩(1≤i<j≤n)是优美的&#xff0c;如果&#xff1a; a i a j a_ia_j ai​aj…

信息系统安全与对抗-计算机木马、Web网站攻击技术、网络防火墙(期末复习简答题)

目录 七、计算机木马 1、计算机木马与计算机病毒之间存在的相同点和不同点 3、黑客利用远程控制型木马进行网络入侵的六个步骤 十一、Web 网站攻击技术 2、SQL 注入攻击漏洞的探测方法 3、防范 SQL 注入攻击的措施 5、反射型 XSS、存储型 XSS、DOM 型 XSS 的区别 6、判断…

Arthas使用使用方法

一、Arthas简介 可以用来快速定位java程序使用中的问题&#xff0c;查看程序运行过程中的各种信息。 相对于之前jvm命令方式的定位方式&#xff0c;主要有以下特性: 1) 对源程序无侵入性&#xff0c;不需要重启或修改源码 2) 交互式命令行操作方式&#xff0c;方便使用 3)…

软件测试之【软件测试初级工程师技能点全解】

读者大大们好呀&#xff01;&#xff01;!☀️☀️☀️ &#x1f525; 欢迎来到我的博客 &#x1f440;期待大大的关注哦❗️❗️❗️ &#x1f680;欢迎收看我的主页文章➡️寻至善的主页 文章目录 &#x1f525;前言&#x1f680;初级测试工程师技能点&#x1f449;测试理论基…

Shell脚本之数组

数组 数组中可以存放多个值&#xff08;bash 只支持一维数组&#xff09;数组元素的索引从0开始数组在括号内指定数组的值&#xff0c;每个值仅能用空格分割 其中&#xff1a;30为索引0 20为索引1 10为索引2 60为索引3 以此类推&#xff0c;不过注意索引是从0开始的 如果数组中…