Java:读写CSV格式文件(opencsv)

使用opencsv(opencsv-2.3.jar),下载地址:http://sourceforge.net/projects/opencsv/files/latest/download

一,读取CSV格式文件

[java]  view plain  copy
  1. import java.io.File;  
  2. import java.io.FileReader;  
  3. import java.util.List;  
  4.   
  5. import au.com.bytecode.opencsv.CSVReader;  
  6.   
  7. public class ReadCSV {  
  8.     public static void main(String[] args) throws Exception {  
  9.         File file = new File("e:\\read.csv");  
  10.         FileReader fReader = new FileReader(file);  
  11.         CSVReader csvReader = new CSVReader(fReader);  
  12.         String[] strs = csvReader.readNext();  
  13.         if(strs != null && strs.length > 0){  
  14.             for(String str : strs)  
  15.                 if(null != str && !str.equals(""))  
  16.                     System.out.print(str + " , ");  
  17.             System.out.println("\n---------------");  
  18.         }  
  19.         List<String[]> list = csvReader.readAll();  
  20.         for(String[] ss : list){  
  21.             for(String s : ss)  
  22.                 if(null != s && !s.equals(""))  
  23.                     System.out.print(s + " , ");  
  24.             System.out.println();  
  25.         }  
  26.         csvReader.close();  
  27.     }  
  28. }  

执行结果如下:

[plain]  view plain  copy
  1. 编号 , 姓名 , 备注 ,   
  2. ---------------  
  3. 1 , Li , 123456 ,   
  4. 2 , Sean ,   

CSVReader.close()方法本质上是关闭传入其中的FileReader:

[java]  view plain  copy
  1. private BufferedReader br;  
  2.       
  3. public CSVReader(Reader reader, char separator, char quotechar,   
  4.         char escape, int line, boolean strictQuotes, boolean ignoreLeadingWhiteSpace) {  
  5.     this.br = new BufferedReader(reader);  
  6.     this.parser = new CSVParser(separator, quotechar, escape,   
  7.             strictQuotes, ignoreLeadingWhiteSpace);  
  8.     this.skipLines = line;  
  9. }  
  10.   
  11. public void close() throws IOException{  
  12.     br.close();  
  13. }  

当然分隔符可以不是默认的逗号,只需在创建CSVReader时指定其分隔符即可

[java]  view plain  copy
  1. CSVReader csvReader = new CSVReader(fReader, ';');  

二,写CSV格式文件

[java]  view plain  copy
  1. import java.io.File;  
  2. import java.io.FileWriter;  
  3. import java.io.Writer;  
  4.   
  5. import au.com.bytecode.opencsv.CSVWriter;  
  6.   
  7. public class WriteCSV {  
  8.     public static void main(String[] args) throws Exception {  
  9.         File file = new File("e:\\write.csv");  
  10.         Writer writer = new FileWriter(file);  
  11.         CSVWriter csvWriter = new CSVWriter(writer, ',');  
  12.         String[] strs = {"abc" , "abc" , "abc"};  
  13.         csvWriter.writeNext(strs);  
  14.         csvWriter.close();  
  15.     }  
  16. }  

执行结果如下:

CSVWrite的构造方法如下:

[java]  view plain  copy
  1. public static final char DEFAULT_QUOTE_CHARACTER = '"';  
  2.    
  3. public CSVWriter(Writer writer, char separator) {  
  4.     this(writer, separator, DEFAULT_QUOTE_CHARACTER);  
  5. }  

双引号被用作默认的引用符(具体什么意思不清楚)

修改一下CSVReader的初始化方式:

[java]  view plain  copy
  1. CSVWriter csvWriter = new CSVWriter(writer, ',' , '\\');  

CSVReader中使用的是CSVParser中的静态变量:

[java]  view plain  copy
  1. public static final char DEFAULT_QUOTE_CHARACTER = '"';  
  2.   
  3. public static final char DEFAULT_ESCAPE_CHARACTER = '\\';  

但是在CSVWriter中:

[java]  view plain  copy
  1. public static final char DEFAULT_QUOTE_CHARACTER = '"';  
  2.      
  3. public static final char DEFAULT_ESCAPE_CHARACTER = '"';  

看来应该是作者的疏忽


PS:当CSV的记录有空格时,这个工具并不能够识别,推荐我的另外一篇文章javacsv

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值