Java关于读取Excel文件~xlsx xls csv txt 格式文件~持续汇总~
所需的jar百度网盘链接:https://pan.baidu.com/s/146mrCImkZVvi1CJ5KoiEhQ提取码:c329
- 1 需要导入jar包,缺1不可
dom4j-1.6.1.jar
poi-3.9.jar
poi-ooxml-3.9.jar
poi-ooxml-schemas-3.9.jar
xmlbeans-2.3.0.jar
/**
* 1描述:读取xlsx文件.返回二维数组.sz[0][2]表示第一行的第三列数据.
* 传入文件地址即可>>>例如:String[][] sz1 = getxlsx("D:\\1.xlsx");
* 【时间 2019-04-19 15:09:35 作者 陶攀峰】
*/
public static String[][] getxlsx(String filePathName)throws Exception{
File file = new File(filePathName);//根据文件名称获取到文件
List<String[]> list = new ArrayList<String[]>();
int rowLength = 0;//定义行的长度
XSSFWorkbook workbook = new XSSFWorkbook(new FileInputStream(file));
XSSFCell cell = null;
//开始循环sheet页 从0开始
//workbook.getNumberOfSheets()得到sheet页数量
for (int sheetIndex = 0; sheetIndex < workbook.getNumberOfSheets(); sheetIndex++) {
XSSFSheet sheet = workbook.getSheetAt(sheetIndex);
//开始循环当前sheet页的行数 从0开始
//st.getLastRowNum() 当前sheet内容有多少行-1 例如:如果当前有5行数据 st.getLastRowNum()就为4
for (int rowIndex = 0; rowIndex <= sheet.getLastRowNum(); rowIndex++) {
XSSFRow row = sheet.getRow(rowIndex);//得到当前sheet页 当前行的数据
//如果行的数据为空 不退出循环 继续往下走
if (row == null) {
continue;
}
//row.getLastCellNum()表示当前行有多少列
//如果当前行的列数大于0 当前行的长度就为当前行的列数
if (row.getLastCellNum() > rowLength) {
rowLength = row.getLastCellNum();
}
//以当前行的长度为数组大小定义一个String数组
String[] nowRowArray = new String[rowLength];
boolean judgeValue = false;//判断值是否注入数组
//开始循环当前sheet页 当前行的列
//row.getLastCellNum() 表示当前行的列数
for (short columnIndex = 0; columnIndex < row.getLastCellNum(); columnIndex++) {
String value = "";//用来接收单元格内容
cell = row.getCell(columnIndex);//得到当前行的当前列的单元格数据
//如果单元格不为空 不论单元格什么类型 一律以文本格式String获取
if (cell != null) {
cell.setCellType(XSSFCell.CELL_TYPE_STRING);//读取前设置单元格格式 这里设置为String类型
value=cell.getStringCellValue();//得到把单元格内容以String格式获取赋值给我们自定义的变量value
}
/*//如果第一列数据为""空 则直接跳出当前循环
//也就是表示如果当前行的第一列数据为空 此行的数据不作为返回
//如果想表示当前行的第二列数据为空 此行的数据不作为返回的话 把columnIndex == 0 改为 columnIndex == 1 依次类推
//根据自己的需要来选择此段代码的利用
if (columnIndex == 0 && value.trim().equals("")) {
break;
}*/
//【开始】去除value字符串右边的空格 处理后赋值给nowRowArray[columnIndex]
if (value == null) {
nowRowArray[columnIndex]="";
}
int length = value.length();
for (int i = length - 1; i >= 0; i--) {
if (value.charAt(i) != 0x20) {
break;
}
length--;
}
nowRowArray[columnIndex]= value.substring(0, length);
//【结束】去除value字符串右边的空格 处理后赋值给nowRowArray[columnIndex]
judgeValue = true;//已经注入数组
}
//如果为注入数组成功 则向list添加数组
//也就是如果未注入 不向list添加数组
if (judgeValue) {
list.add(nowRowArray);
}
}
}
//定义一个返回的String类型二维数组 [行数][列数]
String[][] returnArray = new String[list.size()][rowLength];
//以返回二维数组的行数为循环次数 依次往返回的二维数组中添加数组
for (int i = 0; i < returnArray.length; i++) {
returnArray[i] = list.get(i);
}
return returnArray;
}
1描述:读取xlsx文件.返回二维数组.sz[0][2]表示第一行的第三列数据.
- 2需要导入jar包 poi-3.9.jar
/**
* 2描述:读取xls文件.返回二维数组.sz[0][2]表示第一行的第三列数据.
* 传入文件地址即可>>>例如:String[][] sz2 = getxls("D:\\1.xls");
* 【时间 2019-04-19 16:11:51 作者 陶攀峰】
*/
@SuppressWarnings("deprecation")
public static String[][] getxls(String filePathName)throws Exception{
File file = new File(filePathName);//根据文件名称获取到文件
List<String[]> list = new ArrayList<String[]>();
int rowLength = 0;//定义行的长度
BufferedInputStream in = new BufferedInputStream(new FileInputStream(file));
// 打开HSSFWorkbook
POIFSFileSystem fs = new POIFSFileSystem(in);
HSSFWorkbook workbook = new HSSFWorkbook(fs);
HSSFCell cell = null;
//开始循环sheet页 从0开始
//workbook.getNumberOfSheets()得到sheet页数量
for (int sheetIndex = 0; sheetIndex < workbook.getNumberOfSheets(); sheetIndex++) {
HSSFSheet sheet = workbook.getSheetAt(sheetIndex);
//开始循环当前sheet页的行数 从0开始
//st.getLastRowNum() 当前sheet内容有多少行-1 例如:如果当前有5行数据 st.getLastRowNum()就为4
for (int rowIndex = 0; rowIndex <= sheet.getLastRowNum(); rowIndex++) {
HSSFRow row = sheet.getRow(rowIndex);//得到当前sheet页 当前行的数据
//如果行的数据为空 不退出循环 继续往下走
if (row == null) {
continue;
}
//row.getLastCellNum()表示当前行有多少列
//如果当前行的列数大于0 当前行的长度就为当前行的列数
if (row.getLastCellNum() > rowLength) {
rowLength = row.getLastCellNum();
}
//以当前行的长度为数组大小定义一个String数组
String[] nowRowArray = new String[rowLength];
boolean judgeValue = false;//判断值是否注入数组
//开始循环当前sheet页 当前行的列
//row.getLastCellNum() 表示当前行的列数
for (short columnIndex = 0; columnIndex < row.getLastCellNum(); columnIndex++) {
String value = "";//用来接收单元格内容
cell = row.getCell(columnIndex);//得到当前行的当前列的单元格数据
//如果单元格不为空 不论单元格什么类型 一律以文本格式String获取
if (cell != null) {
cell.setCellType(HSSFCell.CELL_TYPE_STRING);//读取前设置单元格格式 这里设置为String类型
value=cell.getStringCellValue();//得到把单元格内容以String格式获取赋值给我们自定义的变量value
}
/*//如果第一列数据为""空 则直接跳出当前循环
//也就是表示如果当前行的第一列数据为空 此行的数据不作为返回
//如果想表示当前行的第二列数据为空 此行的数据不作为返回的话 把columnIndex == 0 改为 columnIndex == 1 依次类推
//根据自己的需要来选择此段代码的利用
if (columnIndex == 0 && value.trim().equals("")) {
break;
}*/
//【开始】去除value字符串右边的空格 处理后赋值给nowRowArray[columnIndex]
if (value == null) {
nowRowArray[columnIndex]="";
}
int length = value.length();
for (int i = length - 1; i >= 0; i--) {
if (value.charAt(i) != 0x20) {
break;
}
length--;
}
nowRowArray[columnIndex]= value.substring(0, length);
//【结束】去除value字符串右边的空格 处理后赋值给nowRowArray[columnIndex]
judgeValue = true;//已经注入数组
}
//如果为注入数组成功 则向list添加数组
//也就是如果未注入 不向list添加数组
if (judgeValue) {
list.add(nowRowArray);
}
}
}
in.close();
//定义一个返回的String类型二维数组 [行数][列数]
String[][] returnArray = new String[list.size()][rowLength];
//以返回二维数组的行数为循环次数 依次往返回的二维数组中添加数组
for (int i = 0; i < returnArray.length; i++) {
returnArray[i] = list.get(i);
}
return returnArray;
}
2描述:读取xls文件.返回二维数组.sz[0][2]表示第一行的第三列数据.
- 3无需导入任何jar
/**
* 3描述:读取csv文件.返回二维数组.sz[0][2]表示第一行的第三列数据.
* 传入文件地址即可>>>例如:String[][] sz3 = getcsv("D:\\1.csv");
* 【时间 2019-04-19 16:19:29 作者 陶攀峰】
*/
public static String[][] getcsv(String filePathName)throws Exception{
String[][]sz=null;
StringBuilder builder = new StringBuilder();
BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(new File(filePathName)),"GBK"));
String line=null;
while ((line = reader.readLine()) != null) {
builder.append(line + "\n");//按行读取,每行数据之间用换行符分隔
}
reader.close();
//------------下面把内容赋值给二维数组------------
String[]return1=builder.toString().split("\n");//按照换行符进行分隔.return1[0] 表示第一行的内容.
sz=new String[return1.length][return1[0].split(",").length];//给数组定义长度.一维长度为多少行.二维长度为多少列.
for (int i = 0; i < return1.length; i++) {
String[]return2=return1[i].split(",");//按照逗号分隔是因为reader.readLine()把每个单元格自动用,拼接作为间隔
for (int j = 0; j < return2.length; j++) {
sz[i][j]=return2[j];//赋值
}
}
return sz;
}
3描述:读取csv文件.返回二维数组.sz[0][2]表示第一行的第三列数据.
- 4 无需导入任何jar
/**
* 4描述:读取txt文件.返回一维数组.下标0表示第一行数据.
* 传入文件地址即可>>>例如:String[] sz4 = gettxt("D:\\1.txt");
* 【时间 2019-04-19 13:39:07 作者 陶攀峰】
*/
public static String[] gettxt(String filePathName)throws Exception{
StringBuilder builder = new StringBuilder();
BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(new File(filePathName)),"GBK"));
String line=null;
while ((line = reader.readLine()) != null) {
builder.append(line + "\n");//按行读取,每行数据之间用换行符分隔
}
reader.close();
return builder.toString().split("\n");
}
4描述:读取txt文件.返回一维数组.下标0表示第一行数据.
Java关于读取Excel文件~xlsx xls csv txt 格式文件~持续汇总~的更多相关文章
- python读取与写入csv,txt格式文件
python读取与写入csv,txt格式文件 在数据分析中经常需要从csv格式的文件中存取数据以及将数据写书到csv文件中.将csv文件中的数据直接读取为dict类型和DataFrame是非常方便也很 ...
- 【转】java将excel文件转换成txt格式文件
在实际应用中,我们难免会遇到解析excel文件入库事情,有时候为了方便,需要将excel文件转成txt格式文件.下面代码里面提供对xls.xlsx两种格式的excel文件解析,并写入到一个新的txt文 ...
- tablib把数据导出为Excel、JSON、CSV等格式的Py库(写入数据并导出exl)
#tablib把数据导出为Excel.JSON.CSV等格式的Py库 #python 3 import tablib #定义列标题 headers = ('1列', '2列', '3列', '4列', ...
- 使用jsp读取TXT格式文件
<%@page import="java.io.BufferedReader"%> <%@page import="java.io.FileReader ...
- js读取文本内容,支持csv.txt
js读取文本内容,支持csv.txt <!DOCTYPE html> <html> <head> <meta charset="UTF-8" ...
- 批量将某一目录下的.py文件改为.txt格式文件
#!/usr/env/python#-*- coding:utf-8 -*-#批量将某一目录下的.py文件改为.txt格式文件import os,os.pathfile_list = os.listd ...
- JAVA导入(读取)Excel中的数据(支持xls与xlsx文件)
一.导入jar包 poi-3.7.jarpoi-scratchpad-3.7.jarpoi-examples-3.7.jarpoi-ooxml-3.7.jarpoi-ooxml-schemas-3.7 ...
- java 读取excel 2007 .xlsx文件 poi实现
工作需要读取excel里面的行内容,使用java实现较为简单. 在最开始,尝试使用 jxl-2.6.12 来实现读取excel 的行内容.但是按照网上的方法,程序根本无法正确处理文件流.经过谷姐的一番 ...
- java实现读取excel文件内容
package excel; import java.io.FileInputStream; import java.io.InputStream; import java.text.SimpleDa ...
随机推荐
- Netty中的连接管理
连接管理是我们首先需要关注的,检测空闲连接以及超时对于及时释放资源来说是至关重要的.由于这是一项常见的任务,Netty特地为它提供了几个ChannelHandler实现. 用于空闲连接以及超时的Cha ...
- linux设备驱动之字符设备驱动模型(1)
一:字符设备驱动 在linux下面,应用层看到的一切皆为文件(名字)所有的设备都是文件,都可以调用open,read,write来操作,而在内核中每个中每个设备有唯一的对应一个设备号: APP ( ...
- 【转】MySQL datetime数据类型设置当前时间为默认值
转自http://blog.csdn.net/u014694759/article/details/30295285 方法一: MySQL目前不支持列的Default 为函数的形式,如达到你某列的默认 ...
- 【线程系列五】什么时候释放锁—wait()、notify()
由于等待一个锁定线程只有在获得这把锁之后,才能恢复运行,所以让持有锁的线程在不需要锁的时候及时释放锁是很重要的.在以下情况下,持有锁的线程会释放锁: 1. 执行完同步代码块. 2. 在执行 ...
- 【转】利用 force index优化sql语句性能
今天写了一个统计sql,在一个近亿条数据的表上执行,200s都查不出结果.SQL如下: select customer,count(1) c from upv_** where created bet ...
- linux 下 Emacs dired 模式 隐藏 dot file ".filename" 文件
有时候 emacs 下调用 C-x dired 是挺方便的一个事,但是一堆的点文件(linux下以"."为前缀的文件,即隐藏文件)让人目不暇接,打算隐藏之. 参考如下: 最主要的是 ...
- 创建的UIWindow为何不显示
一.window创建方法不同,导致window的显示不同 1.window创建,但是不会显示 UIWindow *myWindow3 = [[UIWindow alloc] initWithFrame ...
- Ames房价预测特征工程
最近学人工智能,讲到了Kaggle上的一个竞赛任务,Ames房价预测.本文将描述一下数据预处理和特征工程所进行的操作,具体代码Click Me. 原始数据集共有特征81个,数值型特征38个,非数值型特 ...
- 了解mysqlpump工具
Ⅰ.功能分析 1.1 多线程介绍 mysqlpump是MySQL5.7的官方工具,用于取代mysqldump,其参数与mysqldump基本一样 mysqlpump是多线程备份,但只能到表级别,单表备 ...
- 部署:持续集成(CI)与持续交付(CD)——《微服务设计》读书笔记
系列文章目录: <微服务设计>读书笔记大纲 一.CI(Continuous Integration)简介 CI规则1:尽量频繁地把代码签入到分支中以进行集成 CI规则2: ...