Giriş
Şu satırı dahil
ederiz.
import org.apache.commons.csv.CSVFormat;
import org.apache.commons.csv.CSVPrinter;
import org.apache.commons.csv.QuoteMode;
Kullanım - Okuma
Bu sınıf CSVParser sınıfının constructor metodun parametre olarak geçilirse, veriyi formatlar.
Örnek
try (CSVParser csvParser = new CSVParser(reader, CSVFormat.DEFAULT)) {
List<CSVRecord> csvRecords = csvParser.getRecords();
...
} catch (IOException e){
...
}
Kullanım - YazmaBu sınıf CSVPrinter sınıfının constructor metodun parametre olarak geçilirse, veriyi formatla
DEFAULT Alanı
Örnek ver
parse metodu
Şöyle
yaparız.
final FileReader fr = ..
final Iterable<CSVRecord> records = CSVFormat.DEFAULT.withDelimiter(' ').parse(fr);
for (final CSVRecord record : records) {
...
}
RFC4180 Alanı
DEFAULT RFC4180 Comment
=================================== =========================== ========================
withDelimiter(',') withDelimiter(',') Same
withQuote('"') withQuote('"') Same
withRecordSeparator("\r\n") withRecordSeparator("\r\n") Same
withIgnoreEmptyLines(true) withIgnoreEmptyLines(false) Don't ignore blank lines
withAllowDuplicateHeaderNames(true) - Don't allow duplicates
=================================== =========================== ========================
withFirstRecordAsHeader()
RFC4180 standardında son satır isteğe bağlıdır, ancak diğer satırlar CR/LF ile biter.
Şöylediraaa,bbb,ccc CRLF
zzz,yyy,xxx
RFC4180 standardında field değerinde double quote varsa field double quote ile escape edilir. Açıklaması
şöyle
Each field may or may not be enclosed in double quotes (however some programs, such as Microsoft Excel, do not use double quotes at all). If fields are not enclosed with double quotes, then double quotes may not appear inside the fields.
RFC4180 standardında field değerinde CR/LF varsa double quote ile escape edilir.
Şöyledir. Burada iki satır var.
"aaa","b CRLF
bb","ccc" CRLF
zzz,yyy,xxx
Örnek
Elimizde şöyle bir veri
olsunid,first,last,city
1,john,doe,austin
2,jane,mary,seattle
CSVFormat csvFormat = CSVFormat.RFC4180.withFirstRecordAsHeader();
withAllowMissionColumnNames metodu
Şöyle
yaparızReader reader = new InputStreamReader(in);
try {
CSVParser csvParser = new CSVParser(reader, CSVFormat.DEFAULT
.withFirstRecordAsHeader().withIgnoreHeaderCase().withTrim()
.withAllowMissingColumnNames());
...
} catch (IOException e) {
...
}
withFirstRecordAsHeader metodu
Şöyle yaparızprivate static final String CSV_FILE_PATH = "C:Test Data\\names.csv";
try (
Reader reader = Files.newBufferedReader(Paths.get(CSV_FILE_PATH));
CSVParser csvParser = new CSVParser(reader, CSVFormat.DEFAULT
.withFirstRecordAsHeader()
.withIgnoreHeaderCase()
.withTrim());
) {
...
}
withEscape metodu
ÖrnekŞöyle yaparız.Reader reader = ...;
CSVParser csvParser = null;
try {
csvParser = new CSVParser(reader, CSVFormat.DEFAULT
.withEscape('/')
.withFirstRecordAsHeader()
.withDelimiter('|')
.withIgnoreHeaderCase()
.withTrim());
...
} finally {
...
}
withHeader metodu
ÖrnekŞöyle yaparız.BufferedReader reader = Files.newBufferedReader(Paths.get("przedmioty.csv"));
CSVParser csvParser = new CSVParser(reader,
CSVFormat.DEFAULT.withHeader("Name", "Teacher", "Years")
.withIgnoreHeaderCase()
.withTrim());
for (CSVRecord csvRecord: csvParser) {
...
}
withQuoteMode metoduQuoteMode.NONE için açıklama
şöyle. Yani hiç bir şeyi escape etmez
Never quotes fields. When the delimiter occurs in data, the printer prefixes it with the escape character. If the escape character is not set, format validation throws an exception.
QuoteMode.MINIMAL için açıklama
şöyle. Yani bir alan içinde escape edilmesi gereken veri varsa sadece o alanı escap eder
Quotes fields which contain special characters such as a the field delimiter, quote character or any of the characters in the line separator string.
Örnek
StringBuilder out = new StringBuilder();
try (CSVPrinter csvPrinter = new CSVPrinter(out,
CSVFormat.DEFAULT
.withHeader("AAAA", "BB\"BB", "CC,CC", "DD'DD")
.withDelimiter(',')
.withEscape('\\')
.withQuote('"').withRecordSeparator('\n').withTrim()
.withQuoteMode(QuoteMode.MINIMAL)
)) {
csvPrinter.printRecord("WWWW", "XX\"XX", "YY,YY", "ZZ'ZZ");
}
System.out.println(out);
AAAA,"BB\"BB","CC,CC",DD'DD
WWWW,"XX\"XX","YY,YY",ZZ'ZZ
StringBuilder out = new StringBuilder();
try (CSVPrinter csvPrinter = new CSVPrinter(out,
CSVFormat.DEFAULT
.withHeader("AAAA", "BB\"BB", "CC,CC", "\"DD\"", "1")
.withDelimiter(',')
.withEscape('"')
.withQuote('"').withRecordSeparator('\n').withTrim()
.withQuoteMode(QuoteMode.MINIMAL)
)) {
csvPrinter.printRecord("WWWW", "XX\"XX", "YY,YY", "\"DD\"", "2");
}
System.out.println(out);
AAAA,"BB""BB","CC,CC","""DD""",1
WWWW,"XX""XX","YY,YY","""DD""",2
Örnek
Şöyle
yaparız.
CSVFormat csvFormat = CSVFormat.EXCEL
.withQuoteMode(QuoteMode.MINIMAL);
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(System.out));
CSVPrinter csvPrinter = new CSVPrinter(writer, csvFormat);
csvPrinter.printRecord("eggs", "foo bar ", "spam");
csvPrinter.flush();
csvPrinter.close();
QuoteMode.ALL Her şeyi withEscape() ile belirtilen karaktler escape eder
Örnek
StringBuilder out = new StringBuilder();
try (CSVPrinter csvPrinter = new CSVPrinter(out,
CSVFormat.DEFAULT
.withHeader("AAAA", "BB\"BB", "CC,CC", "\"DD\"", "1")
.withDelimiter(',')
.withEscape('"')
.withQuote('"').withRecordSeparator('\n').withTrim()
.withQuoteMode(QuoteMode.ALL)
)) {
csvPrinter.printRecord("WWWW", "XX\"XX", "YY,YY", "\"DD\"", "2");
}
System.out.println(out);
"AAAA","BB""BB","CC,CC","""DD""","1"
"WWWW","XX""XX","YY,YY","""DD""","2"
Ö