Sobes.tech
Назад к вопросам
Senior
3

Как читать большой CSV-файл (1GB+)? Как парсить и решить проблему разрыва строк на границе чанков?

Компании, где спрашивали
СБЕРСБЕР

Ответ от нейросети

sobes.tech AI

Для чтения большого CSV-файла (1GB+) в Java и корректного парсинга строк, которые могут быть разорваны на границах чанков, можно использовать следующий подход:

  • Читайте файл не целиком, а по частям (чанкам) с помощью BufferedReader или FileChannel.
  • При чтении чанка сохраняйте остаток последней неполной строки и добавляйте ее к следующему чанку.
  • Используйте специализированные CSV-парсеры, которые поддерживают потоковое чтение (например, OpenCSV, Apache Commons CSV).

Пример с BufferedReader и OpenCSV:

try (BufferedReader reader = new BufferedReader(new FileReader("large.csv"))) {
    CSVParser parser = new CSVParserBuilder().withSeparator(',').build();
    CSVReader csvReader = new CSVReaderBuilder(reader).withCSVParser(parser).build();
    String[] nextLine;
    while ((nextLine = csvReader.readNext()) != null) {
        // Обработка строки
    }
}

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