Java CSV读

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

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

年份 品牌 型号 描述 价格

1997FordE350ac, abs, moon3000.001999ChevyVenture "Extended Edition"4900.001999ChevyVenture "Extended Edition, Very Large"5000.001996JeepGrand CherokeeMUST SELL!air, moon roof, loaded4799.00

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

Year,Make,Model,Description,Price1997,Ford,E350,"ac, abs, moon",3000.001999,Chevy,"Venture ""Extended Edition""","",4900.001999,Chevy,"Venture ""Extended Edition, Very Large""",,5000.001996,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 separatorString[] 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();  obj.run();  }   public void run() {String csvFile = "c:/GeoIPCountryWhois.csv";BufferedReader br = null;String line = "";String cvsSplitBy = ","; try {Map<String, String> maps = new HashMap<String, String>();br = new BufferedReader(new FileReader(csvFile));while ((line = br.readLine()) != null) {String[] country = line.split(cvsSplitBy); //// use comma as separatormaps.put(country[4], country[5]);} //loop mapfor (Map.Entry<String, String> entry : maps.entrySet()) {System.out.println("Country [code= " + entry.getKey() + " , name="+ entry.getValue() + "]");} } 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= "TH" , name="Thailand"]Country [code= "CN" , name="China"]Country [code= "JP" , name="Japan"]Country [code= "AU" , name="Australia"]Done

核心代码: Map的 key 不能重复,很简单的吧 🙂

try {Map<String, String> maps = new HashMap<String, String>();br = new BufferedReader(new FileReader(csvFile));while ((line = br.readLine()) != null) {String[] country = line.split(cvsSplitBy); //// use comma as separatormaps.put(country[4], country[5]);} //loop mapfor (Map.Entry<String, String> entry : maps.entrySet()) {System.out.println("Country [code= " + entry.getKey() + " , name="+ entry.getValue() + "]");}

参考资料:

1.维基百科http://zh.wikipedia.org/wiki/%E9%80%97%E5%8F%B7%E5%88%86%E9%9A%94%E5%80%BC

2.How To Read And Parse CSV File In Javahttp://www.mkyong.com/java/how-to-read-and-parse-csv-file-in-java/

我知道按攻略去旅行的人往往玩得过于按步就班,

Java CSV读

相关文章:

你感兴趣的文章:

标签云: