1. 程式人生 > >java操作csv檔案(讀、寫)

java操作csv檔案(讀、寫)

    今天在做專案的時候,發現使用POI無法解析以csv檔案結尾的檔案,雖然csv檔案能用Excel開啟,但是csv檔案沒有像Excel一樣有規定的電子表格形式,故使用POI無法解析csv檔案,在網上找了一下,發現java有提供javacsv檔案來幫忙解析csv檔案。

    CSV是Comma Separated Values(逗號分隔值)的英文縮寫,通常都是純文字檔案。首先先來了解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格式表示就會像下列:
年,製造商,型號,說明,價值
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

java如何操作讀寫csv呢?可以使用opencsv、javacsv等,本文主要介紹javacsv操作csv檔案。

import com.csvreader.CsvReader;  
import java.nio.charset.Charset;  
import java.util.ArrayList;  
import java.util.List;  

public class CsvUtil {  
    //讀取csv檔案  
    public List<String[]> readCsv(String filePath) throws Exception {  
        List<String[]> csvList = new
ArrayList<String[]>(); if (isCsv(filePath)) { CsvReader reader = new CsvReader(filePath, ',', Charset.forName("GBK")); reader.readHeaders(); // 跳過表頭 如果需要表頭的話,不要寫這句。 while (reader.readRecord()) { //逐行讀入除表頭的資料 csvList.add(reader.getValues()); } reader.close(); } else
{ System.out.println("此檔案不是CSV檔案!"); } return csvList; } //判斷是否是csv檔案 private boolean isCsv(String fileName) { return fileName.matches("^.+\\.(?i)(csv)$"); } //方法測試 public static void main(String[] args) throws Exception { String filepath = "C:/群組.csv"; CsvUtil su = new CsvUtil(); List<String[]> list = su.readCsv(filepath); for (int r = 0; r < list.size(); r++) { for (int c = 0; c < list.get(r).length; c++) { String cell = list.get(r)[c]; System.out.print(cell + "\t"); } System.out.print("\n"); } } }

寫資料到csv檔案

/**   
     * 寫入CSV檔案   
     */    
    public static void WriteCsv(){    
        try {    
                String csvFilePath = "C:/群組.csv";    
                CsvWriter wr =new CsvWriter(csvFilePath,',',Charset.forName("SJIS"));//日文編碼  
                String[] contents = {"警告資訊","非法操作","沒有許可權","操作失敗"};                        
                wr.writeRecord(contents);    
                wr.close();    
         } catch (IOException e) {    
            e.printStackTrace();    
         }    
    }