У меня очень большие файлы csv, которые я пытаюсь выполнить итерацией. Я использую opencsv, и я бы хотел использовать CsvToBean, чтобы я мог динамически устанавливать сопоставления столбцов из базы данных. У меня есть вопрос, как это сделать, не захватывая весь файл и не бросая его в список. Я пытаюсь предотвратить ошибки памяти.Как обрабатывать большой файл csv или читать большой CSV-файл в кусках
В настоящее время я передаю весь набор результатов в список.
List<MyOption> myObjects = csv.parse(strat, getReader("file.txt"));
for (MyObject myObject : myObjects) {
System.out.println(myObject);
}
Но я нашел этот метод итератора, и мне интересно, если это будет просто перебирать каждую строку, а не весь файл сразу?
Iterator myObjects = csv.parse(strat, getReader("file.txt")).iterator();
while (myObjects.hasNext()) {
MyObject myObject = (MyObject) myObjects.next();
System.out.println(myObject);
}
Так что мой вопрос в чем разница между Итератором и списком?
возможной Dupli cate из [List vs List iterator] (http://stackoverflow.com/questions/8411302/list-vs-list-iterator) –
http://stackoverflow.com/questions/2113216/which-is-more-efficient- a-for-each-loop-or-iterator –
в любом случае, CsvToBean всегда будет анализировать весь файл в списке и возвращать его (согласно источнику, который я нашел в google). Если вы хотите обработать произвольно большой файл, вам понадобится синтаксический анализатор, который читает одну строку во времени, возвращая один компонент во времени. – slipperyseal