Java关于读取Excel文件~csv xls xlsx txt 格式文件~持续汇总~
时间:2019-04-19
本文章向大家介绍Java关于读取Excel文件~csv xls xlsx txt 格式文件~持续汇总~,主要包括Java关于读取Excel文件~csv xls xlsx txt 格式文件~持续汇总~使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
/** * 描述:读取csv.xls.xlsx文件.返回二维数组.sz[0][2]表示第一行的第三列数据. * 传入文件地址即可>>>例如:String[][] sz1 = getcsvORxlsORxlsx("D:\\1.xlsx"); * 【时间 2019-04-19 13:40:25 作者 陶攀峰】 */ @SuppressWarnings("deprecation") public static String[][] getcsvORxlsORxlsx(String filePathName)throws FileNotFoundException, IOException { String[][]sz=null; //根据文件名称获取到文件后缀名 String suffixName=filePathName.substring(filePathName.lastIndexOf(".") + 1); if (suffixName.equals("xls")) { 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); } sz=returnArray; }else if (suffixName.equals("xlsx")) { 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); } sz=returnArray; }else if (suffixName.equals("csv")) { 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; }
/** * 描述:读取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"); }
点击展开
点击展开
点击展开
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- 手摸手 Elastic Stack 使用教程 - 环境安装
- SAS-输出文档生成目录的方法
- 醒醒神,爱奇艺笔试真题
- Qt音视频开发22-通用GPU显示
- 通吃岛屿问题
- 堂妹问我:Dubbo的服务暴露过程
- LeetCode 657. 机器人能否返回原点
- ! [rejected] master -> master (fetch first)
- Mybatis源码学习(二)Mapper动态代理
- Mybatis源码学习(三)executor
- Mybatis源码学习(四)拦截器与插件原理
- SpringBoot如何使用注解装配Bean
- Spring Boot 如何快速实现定时任务
- Django 实现文件上传下载API
- 【原创】Spring Boot 如何手写stater