klamo
9/27/2017 - 1:59 AM

csv工具类

csv工具类

import com.google.common.collect.Lists;
import org.apache.commons.collections.CollectionUtils;

import java.io.BufferedWriter;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.util.List;

public class CreatCSV {

    /**
     * 
    * @Title: creatCSVFile 
    * @Description: 生成csv文件
    * @param filePath   文件路径
    * @param fileName   文件名
    * @param headList   头部信息
    * @param dataList   数据来源
    * @param append   是否追加
    * @throws
     */
    public static void creatCSVFile(String filePath ,String fileName,List<Object> headList,List<List<Object>> dataList,boolean append){
        
        File csvFile = null;
        BufferedWriter csvWtriter = null;
        try {
            csvFile = new File(filePath + fileName);
            File parent = csvFile.getParentFile();
            if (parent != null && !parent.exists()) {
                parent.mkdirs();
            }
            csvFile.createNewFile();
//            csvWtriter = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(csvFile), "GB2312"), 1024);
            FileOutputStream fileOutputStream = new FileOutputStream(csvFile,append);
            fileOutputStream.write(new byte[]{(byte)0xEF, (byte)0xBB, (byte)0xBF});
            csvWtriter = new BufferedWriter(new OutputStreamWriter(fileOutputStream, "UTF-8"), 1024);
            
            // 写入文件头部
            if(CollectionUtils.isNotEmpty(headList)){
                writeRow(headList, csvWtriter);
            }

            // 写入文件内容
            if(CollectionUtils.isNotEmpty(dataList)){
                for (List<Object> row : dataList) {
                    writeRow(row, csvWtriter);
                }
            }

            csvWtriter.flush();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                csvWtriter.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    
    /**
     * 
    * @Title: creatCSVInputStream 
    * @Description: 生成csv文件流(输入流)
    * @param headList
    * @param dataList
    * @return
    * @throws
     */
    public static InputStream creatCSVInputStream(List<Object> headList,List<List<Object>> dataList){
        BufferedWriter csvWtriter = null;
        InputStream is = null;
        ByteArrayOutputStream baos = null;
        try {
            baos = new ByteArrayOutputStream();
            csvWtriter = new BufferedWriter(new OutputStreamWriter(baos), 1024);
            // 写入文件头部
            writeRow(headList, csvWtriter);

            // 写入文件内容
            for (List<Object> row : dataList) {
                writeRow(row, csvWtriter);
            }
            csvWtriter.flush();
            baos.flush();
            
            byte[] bt = baos.toByteArray();
            is = new ByteArrayInputStream(bt, 0, bt.length);
        }  catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                csvWtriter.close();
                baos.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return is;
    }
    
    /**
     * 写一行数据
     * @param row 数据列表
     * @param csvWriter
     * @throws IOException
     */
    private static void writeRow(List<Object> row, BufferedWriter csvWriter) throws IOException {
        for (Object data : row) {
            StringBuffer sb = new StringBuffer();
            String rowStr = sb.append(data).append(",").toString();
            csvWriter.write(rowStr);
        }
        csvWriter.newLine();
    }

    public static void main(String[] args) {
        String filePath = "D:\\";
        String fileName = "abc" + ".csv";
        List<Object> headList = Lists.newArrayList("楼盘ID","楼盘名称");
        CreatCSV.creatCSVFile(filePath,fileName,headList,null,false);

        List<List<Object>> dataList = Lists.newArrayList();
        List<Object> data = Lists.newArrayList("1","1");
        dataList.add(data);
        CreatCSV.creatCSVFile(filePath,fileName,null,dataList,true);
    }
}