2015年06月06日 CSV 浏览(105) 收藏

Java 读取CSV格式文件中的数据(不推荐)

Java 读取CSV格式文件中的数据(参考网上,不推荐)代码如下:

/**
 * @from www.everycoding.com
 * @Description:Java 读取CSV格式文件中的数据(不推荐)
 */
public class CsvReadTester {

	public static List<List> readCSVFile(String filePath) throws IOException {
		InputStreamReader fr = new InputStreamReader(new FileInputStream(filePath));
		BufferedReader br = null;
		 br = new BufferedReader(fr);
         String rec = null;//一行
         String str;//一个单元格
         List<List> listFile = new ArrayList<List>();
         try {                       
                 //读取一行
                 while ((rec = br.readLine()) != null) {
                         Pattern pCells = Pattern
                                         .compile("(\"[^\"]*(\"{2})*[^\"]*\")*[^,]*,");
                         Matcher mCells = pCells.matcher(rec);
                         Listcells = new ArrayList();//每行记录一个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 {
		List<List> csvList = readCSVFile("C:\\my.csv");
		System.out.println(csvList);
	}
}

摘自网上使用正则表达式的方式匹配和读取数据。经笔者测试,有缺陷,最后一列数据无法读取。
比较可靠的方案见:http://everycoding.com/coding/54.html

赞一下 0 人赞了本文