javaPOI导出excel表格

这篇博客介绍了如何在Java项目中利用Apache POI 3.17版本库来导出Excel表格,包括项目的整体结构、所需依赖的导入以及具体的代码实现。
摘要由CSDN通过智能技术生成

目录

1.项目整体结构

2.导包

3.代码实现


 

1.项目整体结构

2.导包

去maven仓库搜索poi,此处我用的是3.17版本,

https://mvnrepository.com/artifact/org.apache.poi/poi/3.17

 

3.代码实现

ContentExportExcelUtils.java

package com.creawor.demo;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.List;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;

/**
 * 读取文件下符合条件的内容, 导出到excel表格 TODO FileUtils
 * 
 * @author luopeixin
 * @version 1.0.0 2019年7月4日
 * @since JDK 1.8
 */
public class ContentExportExcelUtils {

    public static void main(String[] args) {
        // 扫描路径
        String dir = "C:\\Users\\Desktop\\log2019-07";
        // 获取所有扫描文件
        List<File> lists = getAllFiles(dir);
        // 读取出符合条件的内容,分行
        List<String> lineLists = getTxtContext(lists);
        // 表格标题行
        String[] titles = { "时间", "msgID", "responseCode", "msgType" };
        // 导出excel表
        String exportPath = dir + "\\查找結果.xls";
        exportExcel(exportPath, lineLists, titles);
    }

    /**
     * 4.导出表格
     * 
     * @param exportPath
     *            导出路径
     * @param lineLists
     *            内容列表
     * @param titles
     *            标题列表
     *
     * @author luopeixin
     */
    public static void exportExcel(String exportPath, List<String> lineLists, String[] titles) {
        HSSFWorkbook book = new HSSFWorkbook();
        HSSFSheet sheet = book.createSheet("2019-07");
        for (int i = 0; i <= lineLists.size(); i++) {
            // 表格标题第一行
            HSSFRow row = sheet.createRow(i);
            // 设置单元格高度,50个点
            row.setHeightInPoints(30);
            ;
            if (i == 0) {
                for (int j = 0; j < titles.length; j++) {
                    // 设置列宽,20个字符
                    sheet.setColumnWidth(j, 20 * 256);
                    // 创建单元格
                    HSSFCell cell = row.createCell(j);
                    cell.setCellValue(titles[j]);
                }
            } else {
                // 表格第二行
                for (int j = 0; j < lineLists.size(); j++) {
                    HSSFCell cell = row.createCell(0);
                    cell.setCellValue(lineLists.get(j));
                }
            }

        }

        try {
            FileOutputStream out = new FileOutputStream(exportPath);
            out.flush();
            book.write(out);
            out.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 3.读取文件内容
     * 
     * @param lists
     *            所有的文本路径
     * @author luopeixin
     * @return
     */
    public static List<String> getTxtContext(List<File> lists) {
        List<String> lineLists = new ArrayList<String>();

        for (int i = 0; i < lists.size(); i++) {
            File path = lists.get(i);
            if (path.isFile()) {
                try {
                    FileReader fileReader = new FileReader(path);
                    BufferedReader bufferedReader = new BufferedReader(fileReader);
                    String line;
                    while ((line = bufferedReader.readLine()) != null) {
                        // 一次读入一行数据
                        if (line.contains("\"responseCode\":\"98\"")
                                && line.contains("\"msgType\":\"TRX_RESULT_INQUIRY\"")) {
                            System.out.println(line);
                            lineLists.add(line);
                        }
                    }

                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
        return lineLists;
    }

    /**
     * 2.递归方法 会不断来回调用本身, 但是所有获得的数据都会存放在集合files里面
     * 
     * @param file
     * @param files
     *
     * @author luopeixin
     */
    private static void longErgodic(File file, List<File> files) {
        // .listFiles()方法的使用
        // 把文件夹的所有文件(包括文件和文件名)都放在一个文件类的数组里面
        File[] fillArr = file.listFiles();
        // 如果是一个空的文件夹
        if (fillArr == null) {
            // 后面的不执行,直接返回
            return;
        }

        // 如果文件夹有内容,遍历里面的所有文件(包括文件夹和文件),都添加到集合里面
        for (File file2 : fillArr) {
            // 如果只是想要里面的文件或者文件夹或者某些固定格式的文件可以判断下再添加
            files.add(file2);
            // 添加到集合后,在来判断是否是文件夹,再遍历里面的所有文件
            // 方法的递归
            longErgodic(file2, files);
        }
    }

    /**
     * 1. 获取文件夹下所有的文件
     * 
     * @param dir
     *            自定义扫描路径
     * @return
     * @author luopeixin
     */
    public static List<File> getAllFiles(String dir) {
        // 创建一个集合存放遍历到的File
        List<File> files = new ArrayList<File>();
        File file = new File(dir);
        // 文件夹必须存在 并且要是文件夹
        if (file.exists() && file.isDirectory()) {
            // 重点! 这里要本身一直遍历
            longErgodic(file, files);// 把遍历得到的东西存放在files里面
        }
        return files;
    }

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值