2016-05-18 93 views
0

私はopenCSVを使ってファイルを読み込みますが、通常はファイルの一部だけを読み込みます。それは〜5kの行を含むファイルを扱いますが、しばしば20kが彼にとって問題です(1列のCSVでも)。OpenCSVはファイルの一部だけを読み込みます

openCSVの代わりにBufferedReaderを使用しようとすると、100k行のファイルでも問題はありませんでしたが、その後はopenCSVパーサーがうまくいきません。

あなたはopenCSVの問題を解決する方法を知っていますか、あるいはJavaでファイルをインポートするための他の良いライブラリをお勧めしますか?

+0

OpenCSVはストリーミングされていないため、このような大きなファイルは処理できません。このファイルをストリーミングすることをお勧めします。 –

+0

私は悲しい私は、BufferedReaderを使用しようとしたが、私は自分自身で、通常は十分なセパレータでファイルを分割するには、多くの場合ははるかに複雑なパーサーを書く必要があります。そこで、インポートするライブラリはありますか? –

+0

例外が発生していますが、キャッチブロック内に例外を出力していない場合は表示されないことがあります。 – Priyamal

答えて

0

ファイルで何をしますか?行ごとに読んでみましたか?

CSVReader reader = new CSVReader(new FileReader("yourfile.csv")); 
    String [] nextLine; 
    while ((nextLine = reader.readNext()) != null) { 
     // do whatever you want here 
    } 
+0

私はまったく同じですが、CSVReader数百から数千件の最初の行を読み込み、残りのファイルを見ることはできません。 300行(1k行のファイル)を読み込み、エラーなしでループを終了します(ループを中断する条件はありません) –

+0

小さな修正:コンストラクタではInputStreamReaderを使用しますが、BufferedReaderとFileReaderも試しました。 –

+0

私は同じ問題があります。ほとんどの日は、私たちが得る毎日のファイル全体を読み込みますが、月に一度、ファイルがあります(それは完璧です)理由なく、途中で停止し、特殊文字も隠されていない文字もありません。我々は16進エディタを見ていました。私たちが行を削除すると、それを超えます。私たちはreadNextとreadAllを別の行にします。 344,190行それぞれ649行のファイル内にあります。 Groovyのfiles.splitEachLineを使用すると、649行すべてが取得されます。しかし、私たちはアプリケーションでGroovyを使用しません。 ;) – user1567291

2

私の推測では、あなたが悪いcsvファイルを持っている(つまり、あなたは非制御文字をエスケープしてい)とopencsvがそのようにしないことです。

私が示唆しているのは、最後の行が処理された後の行を見て、それを削除し、後で処理されるかどうかを確認することです。そうであればサイズの問題ではなく、問題の原因となっている行が分かります。

私はopencsvプロジェクトのメンテナーです。私は100万を超えるレコード(CSVReaderとCSVWriter)を使って、opencsvで問題なくパフォーマンスをテストしています。

0

OpenCSV 3.4で問題が発生しました。 BufferedReaderのバッファサイズと同じくらい多くのデータを読み取ることができます。私自身のBufferdReaderが使用されたのか、それとも内部のBufferdReaderが使用されたのかは関係ありません。

OpenCSV 3.10を使用して解決しました。問題はない。

関連する問題