Java讀寫CSV格式檔案(opencsv)
阿新 • • 發佈:2019-01-06
一,讀取CSV格式檔案:
import java.io.File; import java.io.FileReader; import java.util.List; import au.com.bytecode.opencsv.CSVReader; public class ReadCSV { public static void main(String[] args) throws Exception { File file = new File("e:\\read.csv"); FileReader fReader = new FileReader(file); CSVReader csvReader = new CSVReader(fReader); String[] strs = csvReader.readNext(); if(strs != null && strs.length > 0){ for(String str : strs) if(null != str && !str.equals("")) System.out.print(str + " , "); System.out.println("\n---------------"); } List<String[]> list = csvReader.readAll(); for(String[] ss : list){ for(String s : ss) if(null != s && !s.equals("")) System.out.print(s + " , "); System.out.println(); } csvReader.close(); } }
執行結果如下:
編號 , 姓名 , 備註 ,
---------------
1 , Li , 123456 ,
2 , Sean ,
CSVReader.close()方法本質上是關閉傳入其中的FileReader:
private BufferedReader br; public CSVReader(Reader reader, char separator, char quotechar, char escape, int line, boolean strictQuotes, boolean ignoreLeadingWhiteSpace) { this.br = new BufferedReader(reader); this.parser = new CSVParser(separator, quotechar, escape, strictQuotes, ignoreLeadingWhiteSpace); this.skipLines = line; } public void close() throws IOException{ br.close(); }
當然分隔符可以不是預設的逗號,只需在建立CSVReader時指定其分隔符即可:
CSVReader csvReader = new CSVReader(fReader, ';');
二,寫CSV格式檔案:
import java.io.File; import java.io.FileWriter; import java.io.Writer; import au.com.bytecode.opencsv.CSVWriter; public class WriteCSV { public static void main(String[] args) throws Exception { File file = new File("e:\\write.csv"); Writer writer = new FileWriter(file); CSVWriter csvWriter = new CSVWriter(writer, ','); String[] strs = {"abc" , "abc" , "abc"}; csvWriter.writeNext(strs); csvWriter.close(); } }
執行結果如下:
CSVWrite的構造方法如下:
public static final char DEFAULT_QUOTE_CHARACTER = '"';
public CSVWriter(Writer writer, char separator) {
this(writer, separator, DEFAULT_QUOTE_CHARACTER);
}
雙引號被用作預設的引用符(具體什麼意思不清楚)
修改一下CSVReader的初始化方式:
CSVWriter csvWriter = new CSVWriter(writer, ',' , '\\');
CSVReader中使用的是CSVParser中的靜態變數:
public static final char DEFAULT_QUOTE_CHARACTER = '"';
public static final char DEFAULT_ESCAPE_CHARACTER = '\\';
但是在CSVWriter中:
public static final char DEFAULT_QUOTE_CHARACTER = '"';
public static final char DEFAULT_ESCAPE_CHARACTER = '"';
看來應該是作者的疏忽