package com.data.agg.csv.main;
import com.data.agg.csv.bean.CsvBean;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @Author 赵超
* @Date 2022/5/30 14:32
* @Version 1.0
*/
@Slf4j
public class CsvReader {
String csvFilePath;
/**
* csv文件的读入流
*/
FileInputStream csvFileInputStream;
/**
* csv文件的读取指针
*/
BufferedReader csvFileBufferReader;
/**
* 缓冲行
*/
String bufferedLineForCsvFile;
CsvBean csvBean = new CsvBean();
/**
* 初始化方法
*
* @param csvFilePath csv文件的绝对路径
*/
public CsvReader(String csvFilePath) throws IOException {
this.csvFilePath = csvFilePath;
Charset charset = Charset.forName("gbk");
csvFileInputStream = new FileInputStream(csvFilePath);
csvFileBufferReader = new BufferedReader(new InputStreamReader(csvFileInputStream, charset));
/**
* 读取csv文件的文件表头
*/
String s = csvFileBufferReader.readLine();
//保存csv表头
List<String> header = new ArrayList<>();
String[] columns = s.split(",");
String columnStr = StringUtils.join(columns, ",");
header.add(columnStr);
csvBean.setHeaders(header);
}
public boolean hasNext() throws IOException {
if ("EOF".equals(bufferedLineForCsvFile)) return false;
else return true;
}
/**
* 读取数据中的一行
*
* @return <字段名, 值>形式
* @throws IOException
*/
public Map<String, Object> getLine() throws IOException {
/**
* 读取mid数据中的一行,按照mif数据文件头中的分隔符对其进行分割
*/
String csvColumns = csvFileBufferReader.readLine();
if (csvColumns == null || csvColumns.isEmpty()) {
bufferedLineForCsvFile = "EOF";
return null;
}
String[] columnData = csvColumns.split(",");
/**
* 将数据以<字段名, 值>的形式进行组装
*/
Map<String, Object> oneLineData = new HashMap<>();
String[] headerArr = csvBean.getHeaders().get(0).split(",");
for (int i = 0; i < headerArr.length; i++) {
oneLineData.put(headerArr[i], columnData[i]);
}
// 若缓冲区内存放着EOF标记则直接返回null
if ("EOF".equals(bufferedLineForCsvFile)) {
return null;
}
return oneLineData;
}
/**
* 关闭reader缓冲区
*/
public void close() {
if (csvFileBufferReader != null) {
try {
csvFileBufferReader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (csvFileInputStream != null) {
try {
csvFileInputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
java 读取csv 并转为Map<String,Object>
共2个文件
java:2个
需积分: 5 6 下载量 143 浏览量
2023-05-26
16:30:22
上传
评论
收藏 2KB ZIP 举报
温馨提示
通过引用【opevcsv】依赖,逐行读取数据 并转为Map<String,Object>格式,后续可以通过BeanUtil.MaptoBean()方法将map转为你需要的bean对象; csv文件必须带表头,bean对象命名符合驼峰格式; 通过此方法可以快速的将文件转换为程序可以操作的bean对象;
资源推荐
资源详情
资源评论
收起资源包目录
CsvReader.zip (2个子文件)
CsvBean.java 421B
CsvReader.java 3KB
共 2 条
- 1
资源评论
xhaoDream
- 粉丝: 19
- 资源: 17
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功