Apache common Csv读写文件

最近碰到了一个需求,需要实现下载报表和上传报表的功能,要求使用csv格式,系统中原来使用的报表都是使用的excel格式,这个格式有些问题,因此,决定重新写个功能,查找了些资料,使用apache 的common-csv-1.3.jar包实现这个需求。
由于,不同的业务有不同的业务需求,我这个工具根据自己的业务需求定制的,拿出来大家参考,有什么问题大家可以指出来。


import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.csv.CSVFormat;
import org.apache.commons.csv.CSVParser;
import org.apache.commons.csv.CSVPrinter;
import org.apache.commons.csv.CSVRecord;
import org.apache.log4j.Logger;

/**
 * @类名称:CSVUtils
 * @类描述:csv文件读写
 * @创建时间:2017年1月10日 上午11:05:12
 * @version 1.0.0
 */
public class CSVUtils {

    private static final Logger log = Logger.getLogger(CSVUtils.class);

    // 写csv文件 传参数文件名 路径 csv文件表头 需要写入的数据
    public static File writeCsvFile(String fileName, String path, String[] fileHeaders, List<List<String>> list) {
        File csvFile = null;
        BufferedWriter csvFileOutputStream = null;
        CSVPrinter csvPrinter = null;
        CSVFormat csvFileFormat = CSVFormat.DEFAULT.withHeader(fileHeaders);
        try {
            File file = new File(path);
            if (!file.exists()) {
                file.mkdir();
            }
            csvFile = new File(path+fileName+".csv");
            csvFileOutputStream = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(csvFile), "UTF-8"),
                    1024);
            // 初始化 CSVPrinter
            csvPrinter = new CSVPrinter(csvFileOutputStream, csvFileFormat);
            List<String> ls = null;
            if (list != null) {
                for (int i = 0; i < list.size(); i++) {
                    ls = new ArrayList<String>();
                    ls=list.get(i);
                    for (int j = 0; j < ls.size(); j++) {
                        csvPrinter.print(ls.get(j));
                    }
                    csvPrinter.println();// 换行
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
            log.error("csv文件写入异常");
        } finally {
            try {
                csvFileOutputStream.flush();
                csvFileOutputStream.close();
                csvPrinter.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return csvFile;
    }
//测试写入功能
    public static void main(String[] args) {
        /* String[] fileHeaders={"1","2","3"}; */
        String[] fileHeaders = null;
        List<List<String>> list = new ArrayList<List<String>>();
        List<String> ls = new ArrayList<String>();
        ls.add("a");
        ls.add("b");
        ls.add("c");
        List<String> ls1 = new ArrayList<String>();
        ls1.add("北京");
        ls1.add("上海");
        ls1.add("成都");
        list.add(ls);
        list.add(ls1);
        File file = writeCsvFile("abc", "E:/test",fileHeaders,list); 
    }

    // 读取csv文件 传参数 文件 表头 从第几行开始
    public static List readCsvFile(File file, String[] fileHeaders, Integer num) {
        BufferedReader br = null;
        CSVParser csvFileParser = null;
        List list = null;
        // 创建CSVFormat(header mapping)
        CSVFormat csvFileFormat = CSVFormat.DEFAULT.withHeader(fileHeaders);
        try {
            // 初始化FileReader object
            br = new BufferedReader(new InputStreamReader(new FileInputStream(file), "gbk"));//解决乱码问题
            // 初始化 CSVParser object
            csvFileParser = new CSVParser(br, csvFileFormat);
            // CSV文件records
            List<CSVRecord> csvRecords = csvFileParser.getRecords();
            List data = new ArrayList();
            list = new ArrayList();
            for (int i = num; i < csvRecords.size(); i++) {
                CSVRecord record = csvRecords.get(i);
                for (int j = 0; j < fileHeaders.length; j++) {
                    data.add(record.get(fileHeaders[j]));
                }
                list.add(data);
            }
        } catch (Exception e) {
            e.printStackTrace();
            log.error("csv文件读取异常");
        } finally {
            try {
                br.close();
                csvFileParser.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return list;
    }
}

猜你喜欢

转载自blog.csdn.net/u011915230/article/details/54381562