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

1.读取xlsx文件.返回二维数组.sz[0][2]表示第一行的第三列数据.
  • 所需jar,缺一不可
    • 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
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28
      29
      30
      31
      32
      33
      34
      35
      36
      37
      38
      39
      40
      41
      42
      43
      44
      45
      46
      47
      48
      49
      50
      51
      52
      53
      54
      55
      56
      57
      58
      59
      60
      61
      62
      63
      64
      65
      66
      67
      68
      69
      70
      71
      72
      73
      74
      75
      76
      77
      78
      /**
      * 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;
      }
2描述:读取xls文件.返回二维数组.sz[0][2]表示第一行的第三列数据
  • 需要导入jar包poi-3.9.jar
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    /**
    * 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;
    }
3描述:读取csv文件.返回二维数组.sz[0][2]表示第一行的第三列数据.
  • 无需导入任何jar
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    /**
    * 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;
    }
4描述:读取txt文件.返回一维数组.下标0表示第一行数据.
  • 无需导入任何jar
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    /**
    * 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(filePathName),"GBK"));
    String line=null;
    while ((line = reader.readLine()) != null) {
    builder.append(line + "\n");//按行读取,每行数据之间用换行符分隔
    }
    reader.close();
    return builder.toString().split("\n");
    }