2016-05-18 5 views
0

Ich benutze openCSV, um Dateien zu importieren, aber in der Regel liest es nur einen Teil einer Datei. Es geht um Dateien mit ~ 5k Zeilen, aber oft ist 20k ein Problem für ihn (sogar CSV mit 1 Spalte).OpenCSV liest nur einen Teil einer Datei

Als ich versuchte, BufferedReader anstelle von openCSV zu verwenden gab es kein Problem mit sogar 100k Zeilen Datei, aber dann verliere ich gut openCSV Parser.

Haben Sie eine Idee, wie Sie ein Problem mit openCSV lösen können oder können Sie vielleicht eine andere gute Bibliothek zum Importieren von Dateien in Java empfehlen?

+0

OpenCSV kann eine so große Datei nicht verarbeiten, weil sie nicht streamt. Ich empfehle Ihnen, diese Datei zu streamen. –

+0

Ok, wie ich traurig bin, habe ich versucht, BufferedReader zu verwenden, aber dann muss ich Parser selbst schreiben und normalerweise ist es nicht genug, um Datei durch Trennzeichen zu teilen, oft ist es viel komplizierter. Gibt es also gute Bibliotheken zum Importieren? –

+0

erhalten Sie eine Ausnahme, die möglicherweise nicht angezeigt wird, wenn Sie die Ausnahme nicht in Ihrem catch-Block drucken. – Priyamal

Antwort

0

Was möchten Sie mit der Datei machen? Haben Sie versucht, Zeile für Zeile zu lesen?

+0

ich mache es genau das gleiche, aber CSVReader liest nur hunderte bis mehrere tausend erste Zeilen und kann den Rest der Datei nicht sehen, z. liest 300 Zeilen (in 1k Zeilen Datei) und Schleife endet ohne Fehler (es gibt keine zusätzlichen Bedingungen, um die Schleife zu brechen) –

+0

kleine Korrektur: im Konstruktor verwende ich InputStreamReader, aber ich habe auch versucht, auch BufferedReader und FileReader. –

+0

Ich habe das gleiche Problem. An den meisten Tagen liest es die ganze Tagesdatei, die wir bekommen, aber einmal im Monat gibt es eine Datei (das ist völlig in Ordnung), sie stoppt in der Mitte ohne Grund, ohne Sonderzeichen, ohne versteckte Zeichen. Wir haben sogar in einem Hexeditor gesucht. Wenn wir die Linie entfernen, geht es darüber hinaus. Mit readNext versus readAll erhalten wir sogar andere Zeilen. 344, 190 Zeilen jeweils in einer Datei mit 649 Zeilen. Die Verwendung von Groovys Dateien.splitEachLine ruft alle 649 Zeilen auf. Aber wir verwenden Groovy nicht in unserer App. ;) – user1567291

2

Meine Vermutung ist, dass Sie eine schlechte CSV-Datei haben (dh Sie haben ein nicht entflohenes Steuerzeichen) und opencsv mag das nicht.

Was ich vorschlagen würde ist, dass Sie auf die Zeile nach der letzten Zeile schauen verarbeitet und für kichern entfernen Sie und sehen, ob Sie danach mehr verarbeitet bekommen. Wenn das der Fall ist, ist es keine große Sache und Sie wissen jetzt, welche Zeile ein Problem verursacht.

Als Haftungsausschluss bin ich der Betreuer des opencsv-Projekts und ich habe opencsv mit über einer Million Datensätzen (CSVReader und CSVWriter) getestet, ohne Probleme - solange Sie die eine nach der anderen Methode machen.

0

Ich hatte gerade ein Problem mit OpenCSV 3.4. Es könnte nur so viele Daten wie die Puffergröße des BufferedReaders lesen. Es war egal, ob mein eigener BufferdReader verwendet wurde oder ein interner.

Ich habe es mit OpenCSV 3.10 gelöst. Kein Problem dort.