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端代 ...
随机推荐
- equals()和hashCode()使用总结
equals()和hashCode()使用总结 equals() Object类中的equals方法和"=="是一样的,没有区别,即俩个对象的比较是比较他们的栈内存中存储的内存地址 ...
- C++从array数组向vector向量复制元素的两种方式
#include <iostream> #include <vector> using namespace std; int main() { const int arr_si ...
- [C语言学习笔记二] extern 函数的用法
extern 用来定义一个或多个变量.其后跟数据类型名和初始值.例如: extern int a =10 它与 int,long long int,double,char的本质区别,在于 extern ...
- JSTL (标准标签库)
JSTL(标准标签库) 作用: Web程序员能够利用JSTL和EL来开发Web程序,取代传统直接在页面上嵌入Java程序(Scripting)的做法,以提高程序的阅读性.维护性和方便性. 使用方法:J ...
- mybatis入门案例自定义实现
mybatis入门案例自定义实现 一.需要实现的类和接口 public static void main(String[] args) throws Exception{ //1.读取配置文件 Inp ...
- MySQL 清理缓存—flush tablesFlush tables的影响
摘自:http://blog.chinaunix.net/uid-31401119-id-5781305.html 1 Flush tables简介 官方手册中关于Flush tables的介绍, ...
- 2019年,我花了3个月时间备考PMP
经过几个月的准备,终于在2019年12月7日完成了PMP的考试,并于1月21日查到了成绩,喜获5A,意料之中.总结这次考试的具体情况:涉及题型虽然都没有超出大纲的范围,但是原题出现的概率似乎不高, ...
- LeetCode 381. Insert Delete GetRandom O(1) - Duplicates allowed O(1) 时间插入、删除和获取随机元素 - 允许重复(C++/Java)
题目: Design a data structure that supports all following operations in averageO(1) time. Note: Duplic ...
- json通过后台获取数据库中的内容,并在前端进行显示
fastjson.jar以及Echarts树图的js文件(需要在servlet对json进行赋值,所以需要用到json的插件) 链接:https://pan.baidu.com/s/1GBbamPNG ...
- 西门子PLC在自动浇灌系统中的应用
西门子PLC在自动浇灌系统中的应用(鸿控整理) 2020-02-07 22:50:48 1 自动浇灌系统简介 系统采用自行研制的湿度传感器监测土壤的湿度情况,当土壤湿度低于所要求的值后,自动开启水泵电 ...