Giriş
Şu satırı dahil ederiz.
Ş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
Şöyle yaparız
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
EXCEL Alanı
Örnek ver
parse metodu
Şöyle yaparız.
QuoteMode.NONE için açıklama şöyle. Yani hiç bir şeyi escape etmez
Şöyle yaparız.
final FileReader fr = ..
final Iterable<CSVRecord> records = CSVFormat.DEFAULT.withDelimiter(' ').parse(fr);
for (final CSVRecord record : records) {
...
}
RFC4180 Alanı
DEFAULT ile farkı şöyle
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. Şöyledir
aaa,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 olsun
id,first,last,city
1,john,doe,austin
2,jane,mary,seattle
Şöyle yaparız
CSVFormat csvFormat = CSVFormat.RFC4180.withFirstRecordAsHeader();
withAllowMissionColumnNames metodu
Şöyle yaparız
Reader reader = new InputStreamReader(in);
try {
CSVParser csvParser = new CSVParser(reader, CSVFormat.DEFAULT
.withFirstRecordAsHeader().withIgnoreHeaderCase().withTrim()
.withAllowMissingColumnNames());
...
} catch (IOException e) {
...
}
withFirstRecordAsHeader metodu
Şöyle yaparız
private 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.
Şö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.
withQuoteMode metoduŞö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) {
...
}
QuoteMode.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
Şöyle yaparız.
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
Şöyle yaparız
StringBuilder out = new StringBuilder();
try (CSVPrinter csvPrinter = new CSVPrinter(out,
CSVFormat.DEFAULT
.withHeader("AAAA", "BB\"BB", "CC,CC", "DD'DD")
.withDelimiter(',')
.withEscape('\\') // <- maybe you want '"' instead
.withQuote('"').withRecordSeparator('\n').withTrim()
.withQuoteMode(QuoteMode.MINIMAL)
)) {
csvPrinter.printRecord("WWWW", "XX\"XX", "YY,YY", "ZZ'ZZ");
}
System.out.println(out);
Çıktı olarak şunu alırız
AAAA,"BB\"BB","CC,CC",DD'DD
WWWW,"XX\"XX","YY,YY",ZZ'ZZ
Eğer escape karakterini değiştirirsek
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);
Örnek
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.ALLHer şeyi withEscape() ile belirtilen karaktler escape eder
Örnek
Şöyle yaparız
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);
Çıktı olarak şunu alırız
"AAAA","BB""BB","CC,CC","""DD""","1"
"WWWW","XX""XX","YY,YY","""DD""","2"
Ö
Hiç yorum yok:
Yorum Gönder