
java导入csv文件
本文是在springboot项目中新建一个子模块点击这里->创建子模块步骤,专门用于执行定时任务读取本地window的csv文件,下面是实际操作步骤;
·
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 "";
}
仰天大笑出门去,我辈岂是蓬蒿人
更多推荐
所有评论(0)