Java实现导入csv的示例代码
作者:IT行业小趴菜
这篇文章主要为大家详细介绍了Java实现导入csv的相关知识,文中的示例代码讲解详细,具有一定的借鉴价值,有需要的小伙伴可以跟随小编一起学习一下
前言
大概内容:本文是在springboot项目中新建一个子模块专门用于执行定时任务读取本地window的csv文件,下面是实际操作步骤;
文档样例
一、引入依赖
pom.xml中引入关键依赖
<dependencies> <!--csv文件操作--> <dependency> <groupId>net.sourceforge.javacsv</groupId> <artifactId>javacsv</artifactId> <version>2.0</version> </dependency> <!-- io常用工具类 --> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.11.0</version> </dependency> </dependencies>
下面的依赖根据需要自行选择
<!-- Lombok 主要常用的注解有:@Data,@Getter,@Setter,@Slf4j @Data注解:在JavaBean中使用,它包含getter、setter、toString、equals、hashCode方法,即当使用当前注解时,会自动生成@Data包含的所有方法; @getter注解:在JavaBean中使用,此注解会生成对应的getter方法; @setter注解:在JavaBean中使用,此注解会生成对应的setter方法; @NoArgsConstructor注解:在JavaBean中使用,使用此注解会生成对应的无参构造方法; @AllArgsConstructor注解:在JavaBean中使用,使用此注解会生成对应的有参构造方法; @ToString注解:在JavaBean中使用,使用此注解会自动重写对应的toStirng方法; @EqualsAndHashCode注解:在JavaBean中使用,使用此注解会自动重写对应的equals方法和hashCode方法; @Slf4j:在需要打印日志的类中使用,当项目中使用了slf4j打印日志框架时使用该注解,会简化日志的打印流程,只需调用info方法即可; @Log4j:在需要打印日志的类中使用,当项目中使用了log4j打印日志框架时使用该注解,会简化日志的打印流程,只需调用info方法即可; --> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.12</version> </dependency> <!--工具类--> <dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> <version>5.7.3</version> </dependency> <!--springboot依赖--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>
二、application.yml配置
这里注意path的路径
# Spring配置 spring: port: 9002 servlet: # 应用的访问路径 context-path: /dq-shieldaccess path: #盾构机csv文件路径 csv: F:\dq\r.csv
三、启动类
具体实现类
import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; /** * 注释: 入口 * * @author yangyongzhuo 2022/11/18 9:17 */ @SpringBootApplication public class ShieldAccessApplication { public static void main(String[] args) { SpringApplication.run(ShieldAccessApplication.class, args); System.out.println("(♥◠‿◠)ノ゙ 盾构数据接入程序 启动成功 ლ(´ڡ`ლ)゙ \n"); } }
四、具体实现
这是定时任务类,如不需要定时只需关注具体实现代码
import cn.hutool.core.date.DateUtil; import com.csvreader.CsvReader; import com.manager.shieldaccess.entity.CsvEntity; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Configuration; import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.scheduling.annotation.Scheduled; import java.nio.charset.Charset; import java.util.HashMap; import java.util.Map; /** * 注释: 盾构数据接入控制器 * * @author yangyongzhuo 2022/11/17 20:01 */ @Slf4j @Configuration @EnableScheduling public class ShieldAccessTask { @Value("${path.csv}") private String excelPath; /** * 每十秒执行一次 */ private final String CRON_10SEC = "0/10 * * * * ?"; /** * 注释: 用于定时读取盾构数据 * * @return java.util.Map<java.lang.String, java.lang.Object> * @author yangyongzhuo 2022/11/18 9:31 */ @Scheduled(cron = CRON_10SEC) public Map<String, Object> importData() { Map<String, Object> map = new HashMap<>(); CsvReader reader = null; try { CsvEntity csvEntity = null; reader = new CsvReader(excelPath, ',', Charset.forName("UTF-8")); int sum = 0; //以每一行的形式去读取,此代码意思为前两行不读,只读第三行,封装对象 while (reader.readRecord()) { ++sum; if (sum > 2) { csvEntity = new CsvEntity(reader.get(0), reader.get(1), reader.get(2), reader.get(3), reader.get(4), reader.get(5), reader.get(6), reader.get(7), reader.get(8), reader.get(9)); map.put("executeTime", DateUtil.date()); map.put("data", csvEntity); } } //开始:在这里写Mysql入库的代码 //结束 } catch (Exception e) { log.error("读取文件异常:{}", DateUtil.date()); e.printStackTrace(); } finally { reader.close(); } return map; } }
这是创建的接收文件类
import com.manager.shieldaccess.util.read.Excel; import java.io.Serializable; /** * 注释: csv文件对象 * @return * * @author yangyongzhuo 2022/11/17 19:32 */ public class CsvEntity implements Serializable { private static final long serialVersionUID = 1L; private String RingNo; private String RecordDate; private String RecordTime; private String SystemCondition; @Excel("导向里程,m") private String param1; @Excel("导向俯仰角,° ") private String param2; @Excel("导向滚动角,° ") private String param3; @Excel("导向前盾垂直偏差,mm") private String param4; @Excel("导向尾盾水平偏差,mm") private String param5; @Excel("导向尾盾水平偏差,mm") private String param6; @Excel("导向尾盾垂直偏差,mm") private String param7; @Excel("导向水平倾度,mm/m") private String param8; @Excel("导向竖直倾度,mm/m") private String param9; }
备注注解
import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; /** * 注释: 备注注解 * * @author yangyongzhuo 2022/11/18 10:56 */ @Target({ElementType.METHOD, ElementType.FIELD}) @Retention(RetentionPolicy.RUNTIME) public @interface Excel { String value() default ""; }
以上就是Java实现导入csv的示例代码的详细内容,更多关于Java导入csv的资料请关注脚本之家其它相关文章!