2016-05-18 3 views
0

Я использую openCSV для импорта файлов, но обычно он читает только часть файла. Он имеет дело с файлом, содержащим строки ~ 5k, но часто 20k является для него проблемой (даже CSV с 1 столбцом).OpenCSV читает только часть файла

Когда я попытался использовать BufferedReader вместо openCSV, не было проблемы с файлом строк размером 100 тыс., Но затем я потерял хороший парсер openCSV.

У вас есть идеи, как решить проблему с помощью openCSV или, возможно, вы можете порекомендовать другую хорошую библиотеку для импорта файлов в java?

+0

OpenCSV не может обрабатывать такой большой файл, потому что он не является потоковым. Я рекомендую вам посмотреть в потоковый файл. –

+0

Хорошо, как и я, я попробовал использовать BufferedReader, но потом мне нужно написать парсер самостоятельно и обычно его недостаточно, чтобы разделить файл на разделитель, часто его гораздо сложнее. Так есть ли хорошие библиотеки для импорта? –

+0

вы получаете исключение, вы можете его не увидеть, если вы не печатаете исключение в своем блоке catch. – 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 строк (в файле строк 1 тыс.), а контуры заканчиваются без ошибок (существуют дополнительные условия для разрыва цикла) –

+0

небольшая коррекция: в конструкторе я использую InputStreamReader, но я также пробовал BufferedReader и FileReader. –

+0

У меня такая же проблема. В большинстве дней он читает весь ежедневный файл, который мы получаем, но раз в месяц есть файл (это совершенно нормально), он останавливается посередине без причины, без специального символа, без скрытых символов. Мы даже посмотрели в шестнадцатеричном редакторе. Если мы удалим линию, она выходит за ее пределы. Мы даже получаем разные строки с readNext versus readAll; 344, 190 строк соответственно в файле с 649 строками. Используя Groovy's files.splitEachLine получает все 649 строк. Но мы не используем Groovy в нашем приложении. ;) – user1567291

2

Я предполагаю, что у вас есть файл плохо CSV (то есть у вас есть не спасся управляющий символ) и opencsv не так.

Что я хотел бы предложить, так это то, что вы просматриваете строку после обработки последней строки и для хихиканья удаляете ее и видите, если после этого вы получите больше обработки. Если это так, это не вопрос размера, и теперь вы знаете, какая строка вызывает проблему.

Как отказ от ответственности Я являюсь сторонником проекта opencsv, и у меня есть проверенный производительности opencsv с более чем миллионом записей (CSVReader и CSVWriter) без проблем - до тех пор, пока вы делаете один за другим.

0

У меня была проблема с OpenCSV 3.4. Он мог читать только столько данных, сколько размер буфера BufferedReader. Не имело значения, был ли мой собственный BufferdReader использован или внутренний.

Я разрешил его с помощью OpenCSV 3.10. Нет проблем.

Смежные вопросы