Class CsvWriter

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

public class CsvWriter extends Object implements AutoCloseable

CSV 寫入器

基於 Jackson CSV 實作的 CSV 寫入器,支援:

  • 寫入 List 資料:write(List)
  • 寫入物件資料:write(Object)
  • 自動序列化:根據 Header 自動提取物件屬性

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

使用範例

try (OutputStream os = new FileOutputStream("output.csv");
     CsvWriter writer = new CsvWriter(os)) {

    writer.writeHeaders("id", "name", "price");

    for (Product product : products) {
        writer.write(product);  // 自動提取屬性
    }
}
Since:
1.0
  • Constructor Details

    • CsvWriter

      public CsvWriter(OutputStream outputStream, CsvWriterSettings settings, Charset charset)
      建構 CSV 寫入器
      Parameters:
      outputStream - 輸出串流
      settings - 寫入設定
      charset - 字元編碼
    • CsvWriter

      public CsvWriter(OutputStream outputStream, CsvWriterSettings settings)
      建構 CSV 寫入器(使用 UTF-8 編碼)
      Parameters:
      outputStream - 輸出串流
      settings - 寫入設定
    • CsvWriter

      public CsvWriter(OutputStream outputStream, Charset charset)
      建構 CSV 寫入器(使用預設設定)
      Parameters:
      outputStream - 輸出串流
      charset - 字元編碼
    • CsvWriter

      public CsvWriter(OutputStream outputStream)
      建構 CSV 寫入器(使用預設設定與 UTF-8 編碼)
      Parameters:
      outputStream - 輸出串流
  • Method Details

    • writeHeaders

      public void writeHeaders(String... headers) throws IOException
      寫入 Header 欄位 此方法會設定 Header 並寫入第一行。
      Parameters:
      headers - Header 欄位陣列
      Throws:
      IOException - 寫入失敗
    • writeHeaders

      public void writeHeaders(List<String> headers) throws IOException
      寫入 Header 欄位 此方法會設定 Header 並寫入第一行。
      Parameters:
      headers - Header 欄位列表
      Throws:
      IOException - 寫入失敗
    • setHeaders

      public void setHeaders(String... headers)
      設定 Header 欄位(不寫入檔案)
      Parameters:
      headers - Header 欄位陣列
    • setHeaders

      public void setHeaders(List<String> headers)
      設定 Header 欄位(不寫入檔案) 注意:此方法會建立新的 List,而非累加。
      Parameters:
      headers - Header 欄位列表
    • getHeaders

      public List<String> getHeaders()
      取得當前 Header 欄位
      Returns:
      Header 欄位列表
    • write

      public void write(List<?> dataRow) throws IOException
      寫入一筆資料(List 格式)
      Parameters:
      dataRow - 資料列表
      Throws:
      IOException - 寫入失敗
    • write

      public void write(@NonNull Object data) throws IOException
      寫入一筆資料(物件格式) 自動使用 PropertyMap 提取物件屬性,並根據 Header 順序寫入。
      Parameters:
      data - 物件資料
      Throws:
      IOException - 寫入失敗
    • flush

      public void flush() throws IOException
      強制寫入緩衝區
      Throws:
      IOException - 寫入失敗
    • close

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