Java實(shí)現(xiàn)導(dǎo)入csv的示例代碼
前言
大概內(nèi)容:本文是在springboot項(xiàng)目中新建一個(gè)子模塊專門用于執(zhí)行定時(shí)任務(wù)讀取本地window的csv文件,下面是實(shí)際操作步驟;
文檔樣例
一、引入依賴
pom.xml中引入關(guān)鍵依賴
<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>
下面的依賴根據(jù)需要自行選擇
<!-- Lombok 主要常用的注解有:@Data,@Getter,@Setter,@Slf4j @Data注解:在JavaBean中使用,它包含getter、setter、toString、equals、hashCode方法,即當(dāng)使用當(dāng)前注解時(shí),會(huì)自動(dòng)生成@Data包含的所有方法; @getter注解:在JavaBean中使用,此注解會(huì)生成對(duì)應(yīng)的getter方法; @setter注解:在JavaBean中使用,此注解會(huì)生成對(duì)應(yīng)的setter方法; @NoArgsConstructor注解:在JavaBean中使用,使用此注解會(huì)生成對(duì)應(yīng)的無(wú)參構(gòu)造方法; @AllArgsConstructor注解:在JavaBean中使用,使用此注解會(huì)生成對(duì)應(yīng)的有參構(gòu)造方法; @ToString注解:在JavaBean中使用,使用此注解會(huì)自動(dòng)重寫對(duì)應(yīng)的toStirng方法; @EqualsAndHashCode注解:在JavaBean中使用,使用此注解會(huì)自動(dòng)重寫對(duì)應(yīng)的equals方法和hashCode方法; @Slf4j:在需要打印日志的類中使用,當(dāng)項(xiàng)目中使用了slf4j打印日志框架時(shí)使用該注解,會(huì)簡(jiǎn)化日志的打印流程,只需調(diào)用info方法即可; @Log4j:在需要打印日志的類中使用,當(dāng)項(xiàng)目中使用了log4j打印日志框架時(shí)使用該注解,會(huì)簡(jiǎn)化日志的打印流程,只需調(diào)用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: # 應(yīng)用的訪問路徑 context-path: /dq-shieldaccess path: #盾構(gòu)機(jī)csv文件路徑 csv: F:\dq\r.csv
三、啟動(dòng)類
具體實(shí)現(xiàn)類
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("(????)?? 盾構(gòu)數(shù)據(jù)接入程序 啟動(dòng)成功 ?(′?`?)? \n"); } }
四、具體實(shí)現(xiàn)
這是定時(shí)任務(wù)類,如不需要定時(shí)只需關(guān)注具體實(shí)現(xià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; /** * 注釋: 盾構(gòu)數(shù)據(jù)接入控制器 * * @author yangyongzhuo 2022/11/17 20:01 */ @Slf4j @Configuration @EnableScheduling public class ShieldAccessTask { @Value("${path.csv}") private String excelPath; /** * 每十秒執(zhí)行一次 */ private final String CRON_10SEC = "0/10 * * * * ?"; /** * 注釋: 用于定時(shí)讀取盾構(gòu)數(shù)據(jù) * * @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; //以每一行的形式去讀取,此代碼意思為前兩行不讀,只讀第三行,封裝對(duì)象 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入庫(kù)的代碼 //結(jié)束 } catch (Exception e) { log.error("讀取文件異常:{}", DateUtil.date()); e.printStackTrace(); } finally { reader.close(); } return map; } }
這是創(chuàng)建的接收文件類
import com.manager.shieldaccess.util.read.Excel; import java.io.Serializable; /** * 注釋: csv文件對(duì)象 * @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("導(dǎo)向里程,m") private String param1; @Excel("導(dǎo)向俯仰角,° ") private String param2; @Excel("導(dǎo)向滾動(dòng)角,° ") private String param3; @Excel("導(dǎo)向前盾垂直偏差,mm") private String param4; @Excel("導(dǎo)向尾盾水平偏差,mm") private String param5; @Excel("導(dǎo)向尾盾水平偏差,mm") private String param6; @Excel("導(dǎo)向尾盾垂直偏差,mm") private String param7; @Excel("導(dǎo)向水平傾度,mm/m") private String param8; @Excel("導(dǎo)向豎直傾度,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實(shí)現(xiàn)導(dǎo)入csv的示例代碼的詳細(xì)內(nèi)容,更多關(guān)于Java導(dǎo)入csv的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
一文詳解Elasticsearch和MySQL之間的數(shù)據(jù)同步問題
Elasticsearch中的數(shù)據(jù)是來(lái)自于Mysql數(shù)據(jù)庫(kù)的,因此當(dāng)數(shù)據(jù)庫(kù)中的數(shù)據(jù)進(jìn)行增刪改后,Elasticsearch中的數(shù)據(jù),索引也必須跟著做出改變。本文主要來(lái)和大家探討一下Elasticsearch和MySQL之間的數(shù)據(jù)同步問題,感興趣的可以了解一下2023-04-04ElasticSearch 動(dòng)態(tài)映射實(shí)戰(zhàn)詳解
這篇文章主要為大家介紹了ElasticSearch 動(dòng)態(tài)映射實(shí)戰(zhàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-01-01Java Web Listener實(shí)現(xiàn)事件監(jiān)聽與處理
Java Web開發(fā)中的Listener是一種事件機(jī)制,通過(guò)監(jiān)聽Web應(yīng)用程序的事件,實(shí)現(xiàn)對(duì)事件的處理,從而實(shí)現(xiàn)更加靈活和高效的應(yīng)用程序開發(fā)。Listener能夠監(jiān)聽的事件包括應(yīng)用程序啟動(dòng)和關(guān)閉、Session創(chuàng)建和銷毀、請(qǐng)求和響應(yīng)對(duì)象的創(chuàng)建和銷毀等2023-04-04Java中網(wǎng)絡(luò)IO的實(shí)現(xiàn)方式(BIO、NIO、AIO)介紹
這篇文章主要介紹了Java中網(wǎng)絡(luò)IO的實(shí)現(xiàn)方式(BIO、NIO、AIO)介紹的相關(guān)資料,需要的朋友可以參考下2017-03-03Springboot插件開發(fā)實(shí)戰(zhàn)分享
這篇文章主要介紹了Springboot插件開發(fā)實(shí)戰(zhàn)分享,文章通過(guò)新建aop切面執(zhí)行類MonitorLogInterceptor展開詳細(xì)的相關(guān)內(nèi)容,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-05-05Java基于狀態(tài)模式實(shí)現(xiàn)的文檔編輯模式切換功能實(shí)例
這篇文章主要介紹了Java基于狀態(tài)模式實(shí)現(xiàn)的文檔編輯模式切換功能,結(jié)合實(shí)例形式詳細(xì)分析了狀態(tài)模式的概念、原理及java使用狀態(tài)模式實(shí)現(xiàn)文檔編輯模式切換操作相關(guān)技巧與注意事項(xiàng),需要的朋友可以參考下2018-05-05Java橋接模式實(shí)例詳解【簡(jiǎn)單版與升級(jí)版】
這篇文章主要介紹了Java橋接模式,結(jié)合實(shí)例形式分析了java橋接模式簡(jiǎn)單版與升級(jí)版兩種實(shí)現(xiàn)技巧,需要的朋友可以參考下2019-07-07