csv文件导出工具类

    <dependency>
      <groupId>net.sourceforge.javacsv</groupId>
      <artifactId>javacsv</artifactId>
      <version>2.0</version>
    </dependency>
package com.ctid.util;

import com.csvreader.CsvReader;
import com.csvreader.CsvWriter;
import com.ctid.core.util.StringUtil;
import org.apache.log4j.Logger;

import javax.servlet.http.HttpServletResponse;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.List;

/**
 * @ClassName CSVUtil.java
 * @Description csv文件读取和导出
 * @version 1.0.0
 */
public class CSVUtil {

    private static Logger LOGGER = Logger.getLogger(CSVUtil.class);

    /**
     * 通过指定文件路径读取文件
     * @param filePath 文件路径+文件名称
     * @param encoding 指定编码格式,为空默认utf-8
     * @param header true则跳过表头
     * @return 读取csv文件,转换成list集合
     */
    public static List<Object[]> read(String filePath, boolean header, String encoding) {
        List<Object[]> resultList = new ArrayList<Object[]>();
        try {
            // 创建CSV读对象
            CsvReader csvReader = new CsvReader(filePath, ',', Charset.forName(StringUtil.isEmpty(encoding) ? "utf-8" : encoding));
            if (header) {
                // 跳过第一行表头
                csvReader.readHeaders();
            }
            while (csvReader.readRecord()) {
                resultList.add(csvReader.getValues());
            }
        } catch (Exception e) {
            LOGGER.error("读取文件失败" + e.getMessage());
        }
        return resultList;
    }

    /**
     * 通过输入流读取文件
     * @param inputStream 文件流
     * @return 数据集合
     */
    public static List<Object[]> readByinputStream(InputStream inputStream) {
        List<Object[]> resultList = new ArrayList<Object[]>();
        try {
            // 创建CSV读对象
            CsvReader csvReader = new CsvReader(inputStream, ',', Charset.forName("utf-8"));
            // 跳过第一行表头 不跳过则注释掉
            csvReader.readHeaders();
            while (csvReader.readRecord()) {
                resultList.add(csvReader.getValues());
            }
        } catch (Exception e) {
            LOGGER.error("读取文件失败" + e.getMessage());
        }
        return resultList;
    }

    /**
     * csv格式文件导出
     * @param filePath  文件输出路径(文件路径+文件名称)
     * @param contentList  输出数据
     * @return 是否成功
     */
    public static boolean write(String filePath, List<String[]> contentList) {
        boolean flag = false;
        try {
            // 创建CSV写对象
            CsvWriter csvWriter = new CsvWriter(filePath, ',', Charset.forName("utf-8"));
            // 循环写入数据
            for (String[] content : contentList) {
                csvWriter.writeRecord(content);
            }
            csvWriter.close();
            flag = true;
        } catch (IOException e) {
            flag = false;
            LOGGER.error("写入文件失败" + e.getMessage());
        }
        return flag;
    }

    /**
     * csv格式文件导出
     * @param response  返回对象
     * @param contentList  输出数据
     * @return 是否成功
     */
    public static boolean write(HttpServletResponse response, List<String[]> contentList) {
        boolean flag = false;
        try {
            // 创建CSV写对象
            CsvWriter csvWriter = new CsvWriter(response.getOutputStream(), ',', Charset.forName("utf-8"));
            // 循环写入数据
            for (String[] content : contentList) {
                csvWriter.writeRecord(content);
            }
            csvWriter.close();
            flag = true;
        } catch (IOException e) {
            flag = false;
            LOGGER.error("写入文件失败" + e.getMessage());
        }
        return flag;
    }

    /** <Description functions in a word>
     * Bytes to Hex String
     * 将字节数组转换成16进制字符串
     * <Detail description>
     * @author Qiuzhenping
     * @param src
     * @return [Parameters description]
     * @return String [Return type description]
     * @exception throws [Exception] [Exception description]
     * @see [Related classes#Related methods#Related properties]
     */
    public static String bytes2HexString(byte[] src) {
        StringBuilder stringBuilder = new StringBuilder();
        if (src == null || src.length <= 0) {
            return null;
        }
        for (int i = 0; i < src.length; i++) {
            int v = src[i] & 0xFF;
            String hv = Integer.toHexString(v);
            if (hv.length() < 2) {
                stringBuilder.append(0);
            }
            stringBuilder.append(hv);
        }
        System.out.println(" bytes2HexString = " + stringBuilder.toString().toUpperCase());
        return stringBuilder.toString().toUpperCase();
    }

    /** <Description functions in a word>
     * Judge this FileInputStream is csv file
     * 判断该文件流头部是否包含有指定的信息,从而确认该文件是不是正确的文件类型
     * <Detail description>
     * @author Qiuzhenping
     * @param is
     * @return [Parameters description]
     * @return boolean [Return type description]
     * @exception throws [Exception] [Exception description]
     * @see [Related classes#Related methods#Related properties]
     */
    public static boolean judgeIsCSV(FileInputStream is) {
        try {
            byte[] b = new byte[4];
            is.read(b, 0, b.length);
            // CSV文件的头部的前4个字节
            return bytes2HexString(b).contains("5B75726C");
        } catch (Exception e) {
            e.printStackTrace();
        }
        return false;
    }

}

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值