CSVWriter.javawrite()-Überladungen für Zeichenketten (mit doppelten Anführungszeichen-Escaping), lange Ganzzahlen, Datumsangaben (ISO-8601-Format) und generische Objekte. Konfigurierbares Trennzeichen, Zeilenende und Datumsformat. Wird für ProjectForge-Datenexporte verwendet (Adresslisten, Zeiterfassungsexporte, Finanzberichte).java.io.PrintWriter / java.io.Writer — Textausgabejava.text.DateFormat / SimpleDateFormat — Datumsformatierung für CSV-Datumsfelderjava.util.Date — Datumswerttypjava.util.TimeZone — UTC-Zeitzone für die Datumsformatierung| Einstellung | Standard | Setter |
|---|---|---|
| CSV-Trennzeichen | ';' (Semikolon — europäische Konvention) | setCsvSeparator(char) |
| Zeilenende | "\n" (Unix-Zeilenumbruch) | setCr(String) |
| Datumsformat | "yyyy-MM-dd HH:mm:ss.SSS" | setDateFormat(DateFormat) |
| Datums-Zeitzone | UTC | Im Konstruktor fest codiert |
Alle write()-Methoden geben this (die CSVWriter-Instanz) zurück, was Methodenverkettung ermöglicht:
csvWriter.write("Name").write("Alter").write(42L).writeEndOfLine();
| Methode | Formatierung | Anführungszeichen |
|---|---|---|
write(String s) | Roher String mit " escaped zu "" (Verdopplung) | Immer in "..." eingeschlossen — folgt den RFC-4180-Zitierregeln |
write(long value) | Direkte numerische Ausgabe über PrintWriter.print() | Keine — Zahlen werden nicht in Anführungszeichen gesetzt |
write(Date value) | Formatiert über dateFormat.format() in UTC | In Anführungszeichen eingeschlossen — Datumsangaben können Leerzeichen oder Sonderzeichen enthalten |
write(Object value) | Fallback: String.valueOf(value) | Keine — generische Objekte werden nicht zitiert (riskant bei Objekten mit Kommas/Anführungszeichen) |
Die Methode write(String) implementiert korrektes CSV-Escaping gemäß RFC 4180:
writeSeparator() mit dem firstEntry-Flag)")") ist, wird es zweimal ausgegeben ("") — die Standard-CSV-Escape-Sequenz")writeLine(Object[] values) — Schreibt alle Werte im Array, ruft dann writeEndOfLine() aufwriteEndOfLine() — Gibt das konfigurierte Zeilenende aus (standardmäßig \n) und setzt firstEntry = true zurückDas boolesche Flag firstEntry verfolgt, ob wir am Anfang einer Zeile stehen:
firstEntry == true: auf false setzen (erste Zelle — kein Trennzeichen erforderlich)firstEntry == false: das Trennzeichen vor dem Zellenwert ausgebenCSVWriter definiert DEFAULT_CSV_SEPARATOR_CHAR = ';' als öffentliche Konstante, auf die CSVParser verweist, um ein konsistentes Standardtrennzeichen zwischen Leser und Schreiber sicherzustellen.
Diese Implementierung ist im Vergleich zu Apache Commons CSV oder OpenCSV bewusst minimalistisch:
CSVParser.parseHeadCols() übernommen)write(Object) setzt KEINE Anführungszeichen um die Ausgabe — sie ruft String.valueOf(value) auf und schreibt direkt. Wenn die toString()-Methode des Objekts eine Zeichenkette zurückgibt, die Kommas, Semikolons oder Zeilenumbrüche enthält, wird das resultierende CSV fehlerhaft sein. Dies ist akzeptabel, da von den Aufrufern erwartet wird, dass sie die typspezifischen Überladungen verwenden."yyyy-MM-dd HH:mm:ss.SSS" ist ISO-8601-ähnlich, verwendet aber ein Leerzeichen anstelle von 'T'.868d6abb7 2025 -> 2026 63081666f Quelldatei-Header: 2024 -> 2025. a73905c14 Tippfehler in projectforge*-Verzeichnissen korrigiert Gefunden mit codespell b6092df09 Copyright 2023 -> 2024 ab45d51fa Copyright 2001-2022 -> 2001-2023. 5f7ef41b8 Copyright 2021 -> 2022 ceb63e8a1 Quellcode-Header: (C) 2001-2021. 7c79f1922 Copyright des Quell-Headers -> 2020.