Java CSV读--Read And Parse CSV File In Java(一)

2014-11-24 07:20:35 · 作者: · 浏览: 2

维基百科: 点击打开链接 逗号分隔值(Comma-Separated Values,CSV,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本)。纯文本意味着该文件是一个字符序列,不含必须象二进制数字那样被解读的数据。CSV文件由任意数目的记录组成,记录间以某种换行符分隔;每条记录由字段组成,字段间的分隔符是其它字符或字符串,最常见的是逗号或制表符。通常,所有记录都有完全相同的字段序列。

举例-基本规则及举例--来源维基百科(注意逗号,引号,换行)点击打开链接

年份 品牌 型号 描述 价格
1997 Ford E350 ac, abs, moon 3000.00
1999 Chevy Venture Extended Edition 4900.00
1999 Chevy Venture Extended Edition, Very Large 5000.00
1996 Jeep Grand Cherokee MUST SELL!
air, moon roof, loaded
4799.00

以上数据表可以以CSV格式表示如下:

Year,Make,Model,Description,Price
1997,Ford,E350,ac, abs, moon,3000.00
1999,Chevy,Venture Extended Edition,,4900.00
1999,Chevy,Venture Extended Edition, Very Large,,5000.00
1996,Jeep,Grand Cherokee,MUST SELL!
air, moon roof, loaded,4799.00

以下为代码事例:

一.读CSV文件:

package com.jiangge.csv;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

//1.0.0.0,1.0.0.255,16777216,16777471,AU,Australia
//1.0.1.0,1.0.3.255,16777472,16778239,CN,China
//1.0.4.0,1.0.7.255,16778240,16779263,AU,Australia
//1.0.8.0,1.0.15.255,16779264,16781311,CN,China
//1.0.16.0,1.0.31.255,16781312,16785407,JP,Japan
//1.0.32.0,1.0.63.255,16785408,16793599,CN,China
//1.0.64.0,1.0.127.255,16793600,16809983,JP,Japan
//1.0.128.0,1.0.255.255,16809984,16842751,TH,Thailand


public class ReadCVSMkYong {
	  public static void main(String[] args) {
		ReadCVSMkYong obj = new ReadCVSMkYong();
		obj.run();
	  }
	 
	  public void run() {
		String csvFile = c:/GeoIPCountryWhois.csv;
		BufferedReader br = null;
		String line = ;
		String cvsSplitBy = ,;
	 
		try {
			br = new BufferedReader(new FileReader(csvFile));
			while ((line = br.readLine()) != null) {
			    // use comma as separator
				String[] country = line.split(cvsSplitBy);
				System.out.println(Country [code=  + country[4]  +  , name= + country[5] + ]);
			}
	 
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			if (br != null) {
				try {
					br.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
	 
		System.out.println(Done);
	  }
	 
	}
	

控制台输出结果:

Country [code= AU , name=Australia]
Country [code= CN , name=China]
Country [code= AU , name=Australia]
Country [code= CN , name=China]
Country [code= JP , name=Japan]
Country [code= CN , name=China]
Country [code= JP , name=Japan]
Country [code= TH , name=Thailand]
Done

核心代码其实很简单:

	try {
			br = new BufferedReader(new FileReader(csvFile));
			while ((line = br.readLine()) != null) {
				String[] country = line.split(cvsSplitBy);  // use comma as separator 使用逗号做为分隔符
				System.out.println(Country [code=  + country[4]  +  , name= + country[5] + ]);
			}
	 
		}

二.读CSV文件,使用 Map 去重

package com.jiangge.csv;

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
 

/**
 * This example show you how to use Map to remove the duplicated country code and country name.
 * @author jiangge
 */
public class ReadCVSMkYong2 {
  public static void main(String[] args) {
	  ReadCVSMkYong2 obj = new ReadCVSMkYong2();
	  o