蝈蝈大王

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
package com.common.util;
import java.io.BufferedReader;  
import java.io.FileInputStream;  
import java.io.IOException;  
import java.io.InputStreamReader;  
import java.util.ArrayList;  
import java.util.List;  
import java.util.regex.Matcher;  
import java.util.regex.Pattern; 
/**
 * excel与csv解析
 * 
 * @author Administrator
 *
 */
public class ExcelAndCsvRead {
     private InputStreamReader fr = null;  
        private BufferedReader br = null;  
      
       public ExcelAndCsvRead(String f) throws IOException {  
           fr = new InputStreamReader(new FileInputStream(f));  
       }  
       /** 
         * 解析csv文件 到一个list中 每个单元个为一个String类型记录,每一行为一个list。 再将所有的行放到一个总list中 
         */  
        public List<List<String>> readCSVFile() throws IOException {  
            br = new BufferedReader(fr);  
            String rec = null;// 一行  
            String str;// 一个单元格  
            List<List<String>> listFile = new ArrayList<List<String>>();  
            try {  
                // 读取一行  
                while ((rec = br.readLine()) != null) {  
                    Pattern pCells = Pattern  
                            .compile("(\"[^\"]*(\"{2})*[^\"]*\")*[^,]*,*");  
                    Matcher mCells = pCells.matcher(rec);  
                    List<String> cells = new ArrayList<String>();// 每行记录一个list  
                    // 读取每个单元格  
                    while (mCells.find()) {  
                        str = mCells.group();  
                        str = str.replaceAll(  
                                "(?sm)\"?([^\"]*(\"{2})*[^\"]*)\"?.*,", "$1");  
                        str = str.replaceAll("(?sm)(\"(\"))", "$2");  
                        cells.add(str);  
                    }  
                    listFile.add(cells);  
                }  
            } catch (Exception e) {  
                e.printStackTrace();  
            } finally {  
                if (fr != null) {  
                    fr.close();  
                }  
                if (br != null) {  
                    br.close();  
                }  
            }  
            return listFile;  
        }  
      
    //测试
public static void main(String[] args) throws Throwable { ExcelAndCsvRead test = new ExcelAndCsvRead("C://Users//Administrator//AppData//Local//Temp//moban.csv"); //传入需要解析的文件路径 List<List<String>> csvList = test.readCSVFile(); System.out.println(csvList.get(0)); //解析文件的title System.out.println(csvList.get(1)); //文件的第一行数据 System.out.println(csvList.get(2));//文件的第二行数据 } }

 

posted on 2016-08-21 14:38  蝈蝈大王  阅读(693)  评论(0编辑  收藏  举报