Как эффективно добавить строку строки в существующий CSV-файл, используя opencsv в Java? - PullRequest
0 голосов
/ 21 сентября 2011

Я генерирую CSV-файл, добавляя строки строка за строкой. Другими словами, я добавляю строки одну за другой в конец файла. Я использую opencsv для чтения и записи файла csv.

Проблема в том, что мне нужно выполнить некоторую обработку, чтобы получить новую строку. Поэтому я читаю существующий CSV-файл (~ 6 МБ) и добавляю одну строку и записываю файл. Так это как

файл был х. Я ставлю еще одну строку, файл теперь х + 1. Это включает, конечно, много операций чтения и записи. Как я могу сделать это эффективно. Это не домашняя работа и не обработка файла журнала. Это будет сделано пару раз, но должно быть сделано как можно быстрее.

Спасибо.

Я уже думал о создании большого файла CSV, создав х число меньших файлов CSV и затем объединив его. Это не похоже на эффективность. Может быть, глупо спрашивать, но есть ли способ добавить новую строку без чтения и записи полных данных, поскольку узким местом является то, что она становится все медленнее и медленнее каждый раз, когда к файлу добавляется новая строка.

1 Ответ

1 голос
/ 21 сентября 2011

Почему бы просто не буферизовать ваши записи в фоновом потоке (отправить несколько строк и всякий раз, когда число> N или время истекло> T записать на диск) Или вам всегда нужен мгновенный последовательный результат?

Кроме того, вы обычно можете ПРИЛОЖИТЬ с SEEK (дешевле, чем читать все это). Примерами являются объект RandomAccessFile или FileOutputStream / FileWriter с аргументом добавления. Это все еще несколько дорого, конечно.

Наконец, 6 МБ не так уж и много. Почему бы не прочитать все это и написать это лениво? Предполагая, что это один процесс JVM, хранить его в памяти - самое простое решение ...

...