java 关于xlsx(xls) 和 csv 文件的数据解析
1、适用于xlsx 和 xls
<!--xlsx和xls文件pom依赖-->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.17</version>
</dependency>
package com.test.demo.util; import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook; import java.io.*;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map; /**
* @program: demo
* @description: java解析Excel(xls, xlsx)
* @author: ZhuGaoPo
* @version:1.0
* @create: 2019-11-20 16:34
*/
public class XlsxUtils {
public static void main(String[] args) {
String filePath = "E:\\file\\csv\\test1.xlsx";
String []columns = {"姓名","性别","电话号码"};
List<Map<String,String>> list = getExcel(filePath, columns);
//遍历解析出来的list
for (Map<String,String> map : list) {
System.out.println(map.get(columns[0]));
for (Map.Entry<String,String> entry : map.entrySet()) {
System.out.print(entry.getKey()+":"+entry.getValue()+",");
}
}
}
/**
*读取excel
* @param filePath
* @return
*/
public static Workbook readExcel(String filePath){
Workbook wb = null;
if(filePath==null){
return null;
}
String extString = filePath.substring(filePath.lastIndexOf("."));
InputStream is = null;
try {
is = new FileInputStream(filePath);
if(".xls".equals(extString)){
return wb = new HSSFWorkbook(is);
}else if(".xlsx".equals(extString)){
return wb = new XSSFWorkbook(is);
}else{
return wb = null;
} } catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return wb;
}
/**
*获取excel 的内容
* @param cell
* @return
*/
public static Object getCellFormatValue(Cell cell){
Object cellValue = null;
if(cell!=null){
//判断cell类型
switch(cell.getCellType()){
//数字
case Cell.CELL_TYPE_NUMERIC:{
Double value = cell.getNumericCellValue();
BigDecimal bd1 = new BigDecimal(Double.toString(value));
// 去掉后面无用的零 如小数点后面全是零则去掉小数点
cellValue = bd1.toPlainString().replaceAll("0+?$", "").replaceAll("[.]$", "");
break;
}
case Cell.CELL_TYPE_FORMULA:{
//判断cell是否为日期格式
if(DateUtil.isCellDateFormatted(cell)){
//转换为日期格式YYYY-mm-dd
cellValue = cell.getDateCellValue();
}else{
//数字
cellValue = String.valueOf(cell.getNumericCellValue());
}
break;
}
case Cell.CELL_TYPE_STRING:{
cellValue = cell.getRichStringCellValue().getString();
break;
}
default:
cellValue = "";
}
}else{
cellValue = "";
}
return cellValue;
}
/**
* 获取解析后的list
* @param filePath 路径
* @param columns 表头
* @return
*/
public static List<Map<String,String>> getExcel(String filePath, String []columns) {
Workbook wb =null;
Sheet sheet = null;
Row row = null;
List<Map<String,String>> list = null;
String cellData = null;
// String columns[] = {"姓名","电话号码"};
wb = readExcel(filePath);
if(wb != null){
//用来存放表中数据
list = new ArrayList<Map<String,String>>();
//获取第一个sheet
sheet = wb.getSheetAt(0);
//获取最大行数
int rowNum = sheet.getPhysicalNumberOfRows();
//获取第一行
row = sheet.getRow(0);
//获取最大列数
int column = row.getPhysicalNumberOfCells();
for (int i = 1; i< rowNum; i++) {
Map<String,String> map = new LinkedHashMap<>();
row = sheet.getRow(i);
if(row !=null){
for (int j=0;j<column;j++){
cellData = (String) getCellFormatValue(row.getCell(j));
map.put(columns[j], cellData);
}
}else{
break;
}
list.add(map);
}
}
return list;
}
}
2、适用于csv
package com.test.demo.util; import java.io.*;
import java.util.ArrayList;
import java.util.List; /**
* @program: outbound_server
* @description: 导入csv
* @author: ZhuGaoPo
* @version:1.0
* @create: 2019-11-11 11:41
*/
public class CsvUtils {
/**
* CSV文件导出
* @param file csv文件(路径+文件名), csv文件不会自动创建
* @param dataList 数据
* @return
*/ public static boolean exportCsv(File file, List<String> dataList) { boolean isSuccess = false;
//创建文件流,赋值为null
FileOutputStream outputStream = null;
OutputStreamWriter outputStreamWriter = null;
BufferedWriter bufferedWriter = null;
//操作
try {
outputStream = new FileOutputStream(file);
outputStreamWriter = new OutputStreamWriter(outputStream);
bufferedWriter = new BufferedWriter(bufferedWriter);
if (dataList != null && !dataList.isEmpty()) {
for (String date : dataList) {
//添加数据
bufferedWriter.append(date).append("\r");
}
}
isSuccess = true;
} catch (Exception e) { isSuccess = false; } finally {
if (bufferedWriter != null) {
try {
bufferedWriter.close();
bufferedWriter = null;
} catch (IOException e) {
e.printStackTrace();
}
}
if (outputStreamWriter != null) {
try {
outputStreamWriter.close();
outputStreamWriter = null;
} catch (IOException e) {
e.printStackTrace();
}
} if (outputStream != null) { try { outputStream.close(); outputStream = null; } catch (IOException e) { e.printStackTrace(); } } } return isSuccess; } /**
* CSV文件导入
* @param file csv文件(路径+文件)
* @return
*/
public static List<String> importCsv(File file) {
//数据
List<String> dataList = new ArrayList<String>();
BufferedReader bufferedReader = null;
try {
//为文件流赋数据
// bufferedReader = new BufferedReader(new FileReader(file));
// DataInputStream in = new DataInputStream(new FileInputStream(file));
bufferedReader = new BufferedReader(new InputStreamReader(new FileInputStream(file), "GBK"));
String line;
while ((line = bufferedReader.readLine()) != null) {
dataList.add(line);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (bufferedReader != null) {
try {
bufferedReader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return dataList;
} /**
* * CSV文件导出测试
*/
public static void exportCsvTest(List<String> dataList) {
boolean isSuccess = CsvUtils.exportCsv(new File("F:/CSVTest.csv"), dataList);
System.out.println(isSuccess);
} public static void main(String[] args) {
String fileName = "E:\\file\\csv\\test0\\test0.csv";
List<String> list = CsvUtils.importCsv(new File(fileName));
// List<TelNumber> dataList = new ArrayList<>(16);
if (list != null && !list.isEmpty()) {
for(int i=1; i< list.size();i++){
System.out.println(list.get(i).split(",").length);
/* TelNumber telNumber = new TelNumber();
telNumber.setNumber(list.get(i).split(",")[0]);
dataList.add(telNumber);*/
}
/* System.out.println(dataList);*/
}
}
}
java 关于xlsx(xls) 和 csv 文件的数据解析的更多相关文章
- 从Excel、CSV文件获取数据
#region 从Excel获取数据 /// <summary> /// 从Excel获取数据 /// </summary> /// <param name=" ...
- C++ 把数组数据存入 CSV 文件,以及读取 CSV 文件的数据
1. CSV-百度百科 2. 代码 #pragma once //Microsoft Visual Studio 2015 Enterprise #include<iostream> #i ...
- java读取目录下所有csv文件数据,存入三维数组并返回
package dwzx.com.get; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; ...
- 应用Java泛型和反射导出CSV文件
项目中有需求要把数据导出为CSV文件,因为不同的类有不同的属性,为了代码简单,应用Java的泛型和反射,写了一个函数,完成导出功能. public <T> void saveFile(Li ...
- 用java代码解决excel打开csv文件乱码问题
Java 读取csv文件后,再保存到磁盘上,然后直接用Excel打开,你会发现里面都是乱码. 贴上代码: public class Test { public static void main(S ...
- xls与csv文件的区别
CSV是文本文件,用记事本就能打开.XLS 是二进制的文件只有用 EXCEL 才能打开:CSV 文件格式只能保存活动工作表中的单元格所显示的文本和数值.XLS 中所有的数据行和字符都将保存.数据列以逗 ...
- scala/java等其他语言从CSV文件中读取数据,使用逗号','分割可能会出现的问题
众所周知,csv文件默认以逗号","分割数据,那么在scala命令行里查询的数据: 可以看见,字段里就包含了逗号",",那接下来切割的时候,这本应该作为一个整体 ...
- 用CSV文件读写数据的两种方式(转)
导读:有时候我们需要对收集的数据做统计,并在页面提供显示以及下载.除了对传统的excel存取之外,对CSV文件的存取也很重要.本文列出了这两种操作的详细代码. 代码: <?php $file = ...
- PHP读取CSV文件把数据插入到数据库,本地没有问题,阿里云测试服务器不行
原因是 本地windows和服务器linux编码不同,在代码中不要加编码转换的内容,而是把csv文件另存为utf-8文件上传就可以了,windows和Linux都就可以了. html代码: PHP端代 ...
随机推荐
- Vmware上安装Linux(centos7)图文教程
Vmware上安装Linux(centos7)图文教程 一.准备安装文件(vmware && centos7 镜像) 1.下载 vmware workstations :链接: ...
- pku1113-Wall 凸包(安德鲁算法版)
Wall 题目链接. Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 42823 Accepted: 14602 Descript ...
- 关于 JavaSrcipt 前端开发的建议:模块化开发
JavaScript 是一种优秀的脚本语言. 在 JavaScript 的诞生之初,便于 浏览器 密不可分,如今它更是到了服务器中大展身手. 但是这里不叙述服务端的开发建议. Script 翻译过来就 ...
- SSH(三)
在Spring中引用属性文件: 优点: 1.防止随意更改jdbc的连接 2.给不懂代码的人使用 步骤: 1.数据库连接信息写在属性文件中 ...
- 物流跟踪API-快递单推送
上一篇文章我们讲解了订阅服务功能.我们已经完成了如何把物流订单订阅到快递鸟,快递鸟也能接收到我们的订单信息,接下来就需要快递鸟实时的将最新的物流轨迹推送到我们服务器,我们既然要接收快递鸟的信息,就需要 ...
- 最小生成树(一)kruskal
今天写一篇关于最小生成树的番外篇,以前写最小生成树总是用的prim,关于kruskal只是知道一些原理,一直也没有时间去学,今天偶然看了一些并查集,才想起了这个算法 会想起刚刚(预)学过的数据结构,来 ...
- (四)mybatis逆向工程
构建 逆向工程就是说通过数据库当中的表生成class,mapper,接口,不需要自己编写那些,很方便.跟symfony里面的自动生成是一样的:视频里的人说用的不多,但我觉得很方便呀 具体步骤,首先导入 ...
- 如何在kalilinux上安装docker
如何在kalilinux上安装docker 0X00安装背景 在windows上安装docker使用未果后,便决定在kalilinux上安装一个docker 0X01安装步骤 分别在linux终端执行 ...
- java架构之路-(微服务专题)feign的基本使用和nacos的配置中心
上次回归: 上次我们说了ribbon的基本使用,包括里面的内部算法,算法的细粒度配置,还有我们自己如何实现我们自己的算法,主要还是一些基本使用的知识,还不会使用ribbon的小伙伴可以回去看一下上一篇 ...
- numpy 介绍与使用
一.介绍 中文文档:https://www.numpy.org.cn/ NumPy是Python语言的一个扩展包.支持多维数组与矩阵运算,此外也针对数组运算提供大量的数学函数库.NumPy提供了与Ma ...