Проблема такого рода ошибок в действительно большом файле заключается в том, что несовпадающий символ "" заставляет синтаксический анализатор думать, что весь остаток файла является частью одной и той же строки, поэтому все это содержимое попадает в сообщение об исключении (см. пример ниже).
Что-то интересное заключается в том, что базовый код исключения Сообщение CsvMalformedLineException включает только начало текста оскорбительной строки, что на самом деле более желательно.
Есть ли простой способ предотвратить включение RuntimeException всей строки в свое сообщение?
Пример
Представьте себе такой CSV-файл (небольшой размер для читаемость):
Код: Выделить всё
col1, col2, col3, col4
Column 1-1 data,Column 1-2 data,Column 1-3 data,Column 1-4 data
Column 2-1 data,Column 2-2" data,Column 2-3 data,Column 2-4 data
Column 3-1 data,Column 3-2 data,Column 3-3 data,Column 3-4 data
Column 4-1 data,Column 4-2 data,Column 4-3 data,Column 4-4 data
Код: Выделить всё
Column 2-1 data,Column 2-2" data,Column 2-3 data,Column 2-4 data
Column 3-1 data,Column 3-2 data,Column 3-3 data,Column 3-4 data
Column 4-1 data,Column 4-2 data,Column 4-3 data,Column 4-4 data
Просматривая исходный код, я обнаружил, что класс LineExecutor — это то место, где CsvMalformedLineException обертывается, а для формулирования этого сообщения используется встроенный пакет ресурсов библиотеки, используя метод Контекст CsvMalformedLineException (который является оскорбительной «строкой»). Переопределить это не кажется тривиальным или даже возможным.
Я также рассматривал возможность перехвата RuntimeException, переобертывая вложенное исключение более коротким сообщением, но это кажется более чем хакерским, я ищу другой способ, более естественный для Opencsv.
Подробнее здесь: https://stackoverflow.com/questions/798 ... -i-prevent
Мобильная версия