Class CsvReader

java.lang.Object
io.leandev.appfuse.csv.CsvReader
All Implemented Interfaces:
AutoCloseable

public class CsvReader extends Object implements AutoCloseable

CSV 讀取器

基於 Jackson CSV 實作的 CSV 讀取器,提供多種讀取模式:

設計原則 此類別是依賴隔離層,內部使用 Jackson CSV 但不對外暴露其類型。 底層實作可替換而不影響應用層代碼。

使用範例

try (InputStream is = new FileInputStream("data.csv");
     CsvReader reader = new CsvReader(is)) {

    reader.readHeaders();

    for (CsvRecord record = reader.read(); record != null; record = reader.read()) {
        String username = record.getAsString("username");
        Integer age = record.getAsInteger("age");
        // 處理資料...
    }
}
Since:
1.0
  • Constructor Details

    • CsvReader

      public CsvReader(InputStream inputStream, CsvReaderSettings settings, Charset charset)
      建構 CSV 讀取器
      Parameters:
      inputStream - 輸入串流
      settings - 讀取設定
      charset - 字元編碼
    • CsvReader

      public CsvReader(InputStream inputStream, CsvReaderSettings settings)
      建構 CSV 讀取器(使用 UTF-8 編碼)
      Parameters:
      inputStream - 輸入串流
      settings - 讀取設定
    • CsvReader

      public CsvReader(InputStream inputStream, Charset charset)
      建構 CSV 讀取器(使用預設設定)
      Parameters:
      inputStream - 輸入串流
      charset - 字元編碼
    • CsvReader

      public CsvReader(InputStream inputStream)
      建構 CSV 讀取器(使用預設設定與 UTF-8 編碼)
      Parameters:
      inputStream - 輸入串流
  • Method Details

    • readHeaders

      public List<String> readHeaders() throws IOException
      讀取 Header 欄位 此方法會讀取第一行資料並設定為 Header。 呼叫後,後續的 read() 將從第二行開始讀取。
      Returns:
      Header 欄位列表
      Throws:
      IOException - 讀取失敗
    • read

      public CsvRecord read() throws IOException
      讀取下一筆資料
      Returns:
      CSV 資料記錄,若已讀取完畢則回傳 null
      Throws:
      IOException - 讀取失敗
    • readAll

      public List<CsvRecord> readAll()
      讀取所有資料 注意:此方法會將所有資料載入記憶體,不適合大型檔案。 對於大型檔案請使用 stream()read()
      Returns:
      所有 CSV 資料記錄
    • stream

      public Stream<CsvRecord> stream()
      取得串流,用於函數式處理 串流模式下,記憶體佔用穩定,適合處理大型檔案
      Returns:
      CSV 資料記錄串流
    • skip

      public long skip(long offset) throws IOException
      跳過指定行數
      Parameters:
      offset - 要跳過的行數
      Returns:
      實際跳過的行數
      Throws:
      IOException - 讀取失敗
    • close

      public void close() throws IOException
      Specified by:
      close in interface AutoCloseable
      Throws:
      IOException