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表示第一行数据.

 

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值