blob: 6dee26251ac1297bbaa59c50cdce636bb646e20b [file] [view]
---
id: 'csv'
title: 'CSV'
---
<!--
- Licensed to the Apache Software Foundation (ASF) under one or more
- contributor license agreements. See the NOTICE file distributed with
- this work for additional information regarding copyright ownership.
- The ASF licenses this file to You under the Apache License, Version 2.0
- (the "License"); you may not use this file except in compliance with
- the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-->
# Writing CSV Files
This chapter introduces how to use Fesod to write custom CSV files.
## Overview
Fesod writes CSV files through different parameter configurations. It
uses [Apache Commons CSV](https://commons.apache.org/proper/commons-csv) as the underlying implementation and also
supports direct configuration
through [CSVFormat](https://commons.apache.org/proper/commons-csv/apidocs/org/apache/commons/csv/CSVFormat.html)
settings to achieve writing objectives.
The main parameters are as follows:
| Name | Default Value | Description |
|:------------------|:-------------------|:------------------------------------------------------------------------------------------------------------------------------------------|
| `delimiter` | `,` (comma) | Field delimiter. It's recommended to use predefined constants from `CsvConstant`, such as `CsvConstant.AT` (`@`), `CsvConstant.TAB`, etc. |
| `quote` | `"` (double quote) | Field quote character. It's recommended to use predefined constants from `CsvConstant`, such as `CsvConstant.DOUBLE_QUOTE` (`"`). |
| `recordSeparator` | `CRLF` | Record (line) separator. Varies by operating system, such as `CsvConstant.CRLF` (Windows) or `CsvConstant.LF` (Unix/Linux). |
| `nullString` | `null` | String used to represent `null` values. Note this is different from an empty string `""`. |
| `escape` | `null` | Escape character, determines whether to escape special characters. |
---
## Parameter Details and Examples
The following sections will explain each parameter in detail with code examples.
### delimiter
`delimiter` specifies the field separator in CSV files. The default value is a comma `,`. Additionally, Fesod
provides constants in `CsvConstant` to simplify usage.
#### Code Example
If the CSV file uses `\u0000` as the separator, you can configure it as follows:
```java
@Test
public void delimiterDemo() {
String csvFile = "path/to/your.csv";
FesodSheet.write(csvFile, DemoData.class)
.csv()
.delimiter(CsvConstant.UNICODE_EMPTY)
.doWrite(data());
}
```
### quote
`quote` specifies the quote character that wraps fields. The default value is double quote `"`. This should be set when
field content contains delimiters or line breaks.
> Note: This cannot be the same as the `recordSeparator` setting. It's recommended to use in combination with
`QuoteMode`.
#### Code Example
```java
@Test
public void quoteDemo() {
String csvFile = "path/to/your.csv";
FesodSheet.write(csvFile, DemoData.class)
.csv()
.quote(CsvConstant.DOUBLE_QUOTE, QuoteMode.MINIMAL)
.doWrite(data());
}
```
### recordSeparator
`recordSeparator` specifies the line separator in the file. Different operating systems may use different line
separators (for example, Windows uses `CRLF`, while Unix/Linux uses `LF`).
#### Code Example
```java
@Test
public void recordSeparatorDemo() {
String csvFile = "path/to/your.csv";
FesodSheet.write(csvFile, DemoData.class)
.csv()
.recordSeparator(CsvConstant.LF)
.doWrite(data());
}
```
### nullString
`nullString` is used to replace `null` values with a specific string when writing to the file.
For example, you can replace `null` objects with the string `"N/A"`.
#### Code Example
```java
@Test
public void nullStringDemo() {
String csvFile = "path/to/your.csv";
FesodSheet.write(csvFile, DemoData.class)
.csv()
.nullString("N/A")
.doWrite(data());
}
```
### escape
`escape` specifies the escape character. When `escape` is used, the output CSV will preserve and display the content.
#### Code Example
```java
@Test
public void escapeDemo() {
String csvFile = "path/to/your.csv";
FesodSheet.write(csvFile, DemoData.class)
.csv()
.escape(CsvConstant.BACKSLASH)
.doWrite(data());
}
```
## CSVFormat Configuration Details and Examples
Supports directly building a `CSVFormat` object.
> Fesod currently still supports this approach, but it's not the most recommended usage method.
### Code Example
```java
@Test
public void csvFormatDemo() {
CSVFormat csvFormat = CSVFormat.DEFAULT.builder().setDelimiter(CsvConstant.AT).build();
String csvFile = "path/to/your.csv";
try (ExcelWriter excelWriter = FesodSheet.write(csvFile, DemoData.class).excelType(ExcelTypeEnum.CSV).build()) {
WriteWorkbookHolder writeWorkbookHolder = excelWriter.writeContext().writeWorkbookHolder();
Workbook workbook = writeWorkbookHolder.getWorkbook();
// Check if it's an instance of CsvWorkbook
if (workbook instanceof CsvWorkbook) {
CsvWorkbook csvWorkbook = (CsvWorkbook) workbook;
csvWorkbook.setCsvFormat(csvFormat);
writeWorkbookHolder.setWorkbook(csvWorkbook);
}
WriteSheet writeSheet = FesodSheet.writerSheet(0).build();
excelWriter.write(data(), writeSheet);
}
}
```