Sunny

J2EE和前端的技术分享

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

阅读更多
版权声明:看完觉得好的。请留个脚印,证明你来过 https://blog.csdn.net/qq592304796/article/details/52801097
文章标签: JAVA
个人分类: Java
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭