CSV文件读取

package com.suning.crawler.util;

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.log4j.Logger;

/**
* cvs文件读取
*
* @author xxx
*/
public class CSVParser
{
    // 日志记录
    private Logger logger = Logger.getLogger(CSVParser.class);

    /**
     * 文件路径
     */
    private String filePath;

    /**
     * 字符编码
     */
    private String encode;

    /**
     * 数据存储
     */
    private Map<Integer, List<String>> info;

    /**
     * @param filePath
     *            需要解析的文件路径
     */
    public CSVParser(String filePath)
    {
        this(filePath, "UTF-8");
    }

    /**
     * @param filePath
     *            需要解析的文件路径
     * @param encode
     *            字符编码
     */
    public CSVParser(String filePath, String encode)
    {
        this.filePath = filePath;
        this.encode = encode;
        info = new HashMap<Integer, List<String>>();

        // 开始解析
        parseCsv();
    }

    /**
     * 获取行<code>row<row>中的数据,若该行<code>row<row>中的数据,返回<code>null<code>,否则返回该行中的数据
     *
     * @param row
     *            记录行数
     * @return 当行数据
     */
    public List<String> readLine(int row)
    {
        return info.get(row);
    }

    /**
     * 解析文件的核心代码
     *
     * @return csv文件中的数据
     */
    private List<String> parseCsv()
    {
        List<String> row = null;
        BufferedReader reader = null;
        try
        {
            // 读取文件
            reader = new BufferedReader(new InputStreamReader(new FileInputStream(filePath), encode));
            String rowInfo = reader.readLine();
            // 行记录指针
            int rowIndex = 0;
            while (null != rowInfo && !"".equals(rowInfo.trim()))
            {
                row = new ArrayList<String>();
                // 分割数据列
                for (String cell : rowInfo.split(","))
                {
                    row.add(cell);
                }
                info.put(rowIndex, row);
                rowInfo = reader.readLine();
                ++rowIndex;
            }
        }
        catch (FileNotFoundException e)
        {
            logger.error("file can not be found, file path: " + filePath);
        }
        catch (IOException e)
        {
            logger.error("I/O operations, file path: " + filePath);
        }
        finally
        {
            if (null != reader)
            {
                try
                {
                    reader.close();
                }
                catch (IOException e)
                {
                    logger.error("I/O operations, file path: " + filePath);
                }
            }
        }

        return row;
    }

}

猜你喜欢

转载自spacecity.iteye.com/blog/1465287