Java关于读取Excel文件~xlsx xls csv txt 格式文件~持续汇总~

末蓝、 2022-01-05 15:23 531阅读 0赞

所需的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

ContractedBlock.gif ExpandedBlockStart.gif

  1. /**
  2. * 1描述:读取xlsx文件.返回二维数组.sz[0][2]表示第一行的第三列数据.
  3. * 传入文件地址即可>>>例如:String[][] sz1 = getxlsx("D:\\1.xlsx");
  4. * 【时间 2019-04-19 15:09:35 作者 陶攀峰】
  5. */
  6. public static String[][] getxlsx(String filePathName)throws Exception{
  7. File file = new File(filePathName);//根据文件名称获取到文件
  8. List<String[]> list = new ArrayList<String[]>();
  9. int rowLength = 0;//定义行的长度
  10. XSSFWorkbook workbook = new XSSFWorkbook(new FileInputStream(file));
  11. XSSFCell cell = null;
  12. //开始循环sheet页 从0开始
  13. //workbook.getNumberOfSheets()得到sheet页数量
  14. for (int sheetIndex = 0; sheetIndex < workbook.getNumberOfSheets(); sheetIndex++) {
  15. XSSFSheet sheet = workbook.getSheetAt(sheetIndex);
  16. //开始循环当前sheet页的行数 从0开始
  17. //st.getLastRowNum() 当前sheet内容有多少行-1 例如:如果当前有5行数据 st.getLastRowNum()就为4
  18. for (int rowIndex = 0; rowIndex <= sheet.getLastRowNum(); rowIndex++) {
  19. XSSFRow row = sheet.getRow(rowIndex);//得到当前sheet页 当前行的数据
  20. //如果行的数据为空 不退出循环 继续往下走
  21. if (row == null) {
  22. continue;
  23. }
  24. //row.getLastCellNum()表示当前行有多少列
  25. //如果当前行的列数大于0 当前行的长度就为当前行的列数
  26. if (row.getLastCellNum() > rowLength) {
  27. rowLength = row.getLastCellNum();
  28. }
  29. //以当前行的长度为数组大小定义一个String数组
  30. String[] nowRowArray = new String[rowLength];
  31. boolean judgeValue = false;//判断值是否注入数组
  32. //开始循环当前sheet页 当前行的列
  33. //row.getLastCellNum() 表示当前行的列数
  34. for (short columnIndex = 0; columnIndex < row.getLastCellNum(); columnIndex++) {
  35. String value = "";//用来接收单元格内容
  36. cell = row.getCell(columnIndex);//得到当前行的当前列的单元格数据
  37. //如果单元格不为空 不论单元格什么类型 一律以文本格式String获取
  38. if (cell != null) {
  39. cell.setCellType(XSSFCell.CELL_TYPE_STRING);//读取前设置单元格格式 这里设置为String类型
  40. value=cell.getStringCellValue();//得到把单元格内容以String格式获取赋值给我们自定义的变量value
  41. }
  42. /*//如果第一列数据为""空 则直接跳出当前循环
  43. //也就是表示如果当前行的第一列数据为空 此行的数据不作为返回
  44. //如果想表示当前行的第二列数据为空 此行的数据不作为返回的话 把columnIndex == 0 改为 columnIndex == 1 依次类推
  45. //根据自己的需要来选择此段代码的利用
  46. if (columnIndex == 0 && value.trim().equals("")) {
  47. break;
  48. }*/
  49. //【开始】去除value字符串右边的空格 处理后赋值给nowRowArray[columnIndex]
  50. if (value == null) {
  51. nowRowArray[columnIndex]="";
  52. }
  53. int length = value.length();
  54. for (int i = length - 1; i >= 0; i--) {
  55. if (value.charAt(i) != 0x20) {
  56. break;
  57. }
  58. length--;
  59. }
  60. nowRowArray[columnIndex]= value.substring(0, length);
  61. //【结束】去除value字符串右边的空格 处理后赋值给nowRowArray[columnIndex]
  62. judgeValue = true;//已经注入数组
  63. }
  64. //如果为注入数组成功 则向list添加数组
  65. //也就是如果未注入 不向list添加数组
  66. if (judgeValue) {
  67. list.add(nowRowArray);
  68. }
  69. }
  70. }
  71. //定义一个返回的String类型二维数组 [行数][列数]
  72. String[][] returnArray = new String[list.size()][rowLength];
  73. //以返回二维数组的行数为循环次数 依次往返回的二维数组中添加数组
  74. for (int i = 0; i < returnArray.length; i++) {
  75. returnArray[i] = list.get(i);
  76. }
  77. return returnArray;
  78. }

1描述:读取xlsx文件.返回二维数组.sz[0][2]表示第一行的第三列数据.

  • 2需要导入jar包 poi-3.9.jar

ContractedBlock.gif ExpandedBlockStart.gif

  1. /**
  2. * 2描述:读取xls文件.返回二维数组.sz[0][2]表示第一行的第三列数据.
  3. * 传入文件地址即可>>>例如:String[][] sz2 = getxls("D:\\1.xls");
  4. * 【时间 2019-04-19 16:11:51 作者 陶攀峰】
  5. */
  6. @SuppressWarnings("deprecation")
  7. public static String[][] getxls(String filePathName)throws Exception{
  8. File file = new File(filePathName);//根据文件名称获取到文件
  9. List<String[]> list = new ArrayList<String[]>();
  10. int rowLength = 0;//定义行的长度
  11. BufferedInputStream in = new BufferedInputStream(new FileInputStream(file));
  12. // 打开HSSFWorkbook
  13. POIFSFileSystem fs = new POIFSFileSystem(in);
  14. HSSFWorkbook workbook = new HSSFWorkbook(fs);
  15. HSSFCell cell = null;
  16. //开始循环sheet页 从0开始
  17. //workbook.getNumberOfSheets()得到sheet页数量
  18. for (int sheetIndex = 0; sheetIndex < workbook.getNumberOfSheets(); sheetIndex++) {
  19. HSSFSheet sheet = workbook.getSheetAt(sheetIndex);
  20. //开始循环当前sheet页的行数 从0开始
  21. //st.getLastRowNum() 当前sheet内容有多少行-1 例如:如果当前有5行数据 st.getLastRowNum()就为4
  22. for (int rowIndex = 0; rowIndex <= sheet.getLastRowNum(); rowIndex++) {
  23. HSSFRow row = sheet.getRow(rowIndex);//得到当前sheet页 当前行的数据
  24. //如果行的数据为空 不退出循环 继续往下走
  25. if (row == null) {
  26. continue;
  27. }
  28. //row.getLastCellNum()表示当前行有多少列
  29. //如果当前行的列数大于0 当前行的长度就为当前行的列数
  30. if (row.getLastCellNum() > rowLength) {
  31. rowLength = row.getLastCellNum();
  32. }
  33. //以当前行的长度为数组大小定义一个String数组
  34. String[] nowRowArray = new String[rowLength];
  35. boolean judgeValue = false;//判断值是否注入数组
  36. //开始循环当前sheet页 当前行的列
  37. //row.getLastCellNum() 表示当前行的列数
  38. for (short columnIndex = 0; columnIndex < row.getLastCellNum(); columnIndex++) {
  39. String value = "";//用来接收单元格内容
  40. cell = row.getCell(columnIndex);//得到当前行的当前列的单元格数据
  41. //如果单元格不为空 不论单元格什么类型 一律以文本格式String获取
  42. if (cell != null) {
  43. cell.setCellType(HSSFCell.CELL_TYPE_STRING);//读取前设置单元格格式 这里设置为String类型
  44. value=cell.getStringCellValue();//得到把单元格内容以String格式获取赋值给我们自定义的变量value
  45. }
  46. /*//如果第一列数据为""空 则直接跳出当前循环
  47. //也就是表示如果当前行的第一列数据为空 此行的数据不作为返回
  48. //如果想表示当前行的第二列数据为空 此行的数据不作为返回的话 把columnIndex == 0 改为 columnIndex == 1 依次类推
  49. //根据自己的需要来选择此段代码的利用
  50. if (columnIndex == 0 && value.trim().equals("")) {
  51. break;
  52. }*/
  53. //【开始】去除value字符串右边的空格 处理后赋值给nowRowArray[columnIndex]
  54. if (value == null) {
  55. nowRowArray[columnIndex]="";
  56. }
  57. int length = value.length();
  58. for (int i = length - 1; i >= 0; i--) {
  59. if (value.charAt(i) != 0x20) {
  60. break;
  61. }
  62. length--;
  63. }
  64. nowRowArray[columnIndex]= value.substring(0, length);
  65. //【结束】去除value字符串右边的空格 处理后赋值给nowRowArray[columnIndex]
  66. judgeValue = true;//已经注入数组
  67. }
  68. //如果为注入数组成功 则向list添加数组
  69. //也就是如果未注入 不向list添加数组
  70. if (judgeValue) {
  71. list.add(nowRowArray);
  72. }
  73. }
  74. }
  75. in.close();
  76. //定义一个返回的String类型二维数组 [行数][列数]
  77. String[][] returnArray = new String[list.size()][rowLength];
  78. //以返回二维数组的行数为循环次数 依次往返回的二维数组中添加数组
  79. for (int i = 0; i < returnArray.length; i++) {
  80. returnArray[i] = list.get(i);
  81. }
  82. return returnArray;
  83. }

2描述:读取xls文件.返回二维数组.sz[0][2]表示第一行的第三列数据.

  • 3无需导入任何jar

ContractedBlock.gif ExpandedBlockStart.gif

  1. /**
  2. * 3描述:读取csv文件.返回二维数组.sz[0][2]表示第一行的第三列数据.
  3. * 传入文件地址即可>>>例如:String[][] sz3 = getcsv("D:\\1.csv");
  4. * 【时间 2019-04-19 16:19:29 作者 陶攀峰】
  5. */
  6. public static String[][] getcsv(String filePathName)throws Exception{
  7. String[][]sz=null;
  8. StringBuilder builder = new StringBuilder();
  9. BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(new File(filePathName)),"GBK"));
  10. String line=null;
  11. while ((line = reader.readLine()) != null) {
  12. builder.append(line + "\n");//按行读取,每行数据之间用换行符分隔
  13. }
  14. reader.close();
  15. //------------下面把内容赋值给二维数组------------
  16. String[]return1=builder.toString().split("\n");//按照换行符进行分隔.return1[0] 表示第一行的内容.
  17. sz=new String[return1.length][return1[0].split(",").length];//给数组定义长度.一维长度为多少行.二维长度为多少列.
  18. for (int i = 0; i < return1.length; i++) {
  19. String[]return2=return1[i].split(",");//按照逗号分隔是因为reader.readLine()把每个单元格自动用,拼接作为间隔
  20. for (int j = 0; j < return2.length; j++) {
  21. sz[i][j]=return2[j];//赋值
  22. }
  23. }
  24. return sz;
  25. }

3描述:读取csv文件.返回二维数组.sz[0][2]表示第一行的第三列数据.

  • 4 无需导入任何jar

ContractedBlock.gif ExpandedBlockStart.gif

  1. /**
  2. * 4描述:读取txt文件.返回一维数组.下标0表示第一行数据.
  3. * 传入文件地址即可>>>例如:String[] sz4 = gettxt("D:\\1.txt");
  4. * 【时间 2019-04-19 13:39:07 作者 陶攀峰】
  5. */
  6. public static String[] gettxt(String filePathName)throws Exception{
  7. StringBuilder builder = new StringBuilder();
  8. BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(new File(filePathName)),"GBK"));
  9. String line=null;
  10. while ((line = reader.readLine()) != null) {
  11. builder.append(line + "\n");//按行读取,每行数据之间用换行符分隔
  12. }
  13. reader.close();
  14. return builder.toString().split("\n");
  15. }

4描述:读取txt文件.返回一维数组.下标0表示第一行数据.

转载于:https://www.cnblogs.com/taopanfeng/p/10735474.html

发表评论

表情:
评论列表 (有 0 条评论,531人围观)

还没有评论,来说两句吧...

相关阅读