Чтение CSV-файла в Java
Для некоторого круга задач автоматизации обмена данными между различными приложениями необходимо работать с форматом CSV.  Рассмотрим способы работы с этим форматом в Java.
Как обычно при реализации таких решений есть два пути. Написать все самому и использовать готовый пакет. К примеру, товарищ mycong предложил вариант в рукопашную сделать обработчик CSV, этот путь хорош, если необходимо соблюдать требования лицензионной чистоты или используемая платформа ограничена в объеме памяти для хранении программы.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 | package com.mkyong.util; import java.io.BufferedReader; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; public class ReadCVS {   public static void main(String[] args) { 	ReadCVS obj = new ReadCVS(); 	obj.run();   }   public void run() { 	String csvFile = "/Users/mkyong/Downloads/GeoIPCountryWhois.csv"; 	BufferedReader br = null; 	String line = ""; 	String cvsSplitBy = ","; 	try { 		br = new BufferedReader(new FileReader(csvFile)); 		while ((line = br.readLine()) != null) { 		        // use comma as separator 			String[] country = line.split(cvsSplitBy); 			System.out.println("Country [code= " + country[4]                                   + " , name=" + country[5] + "]"); 		} 	} catch (FileNotFoundException e) { 		e.printStackTrace(); 	} catch (IOException e) { 		e.printStackTrace(); 	} finally { 		if (br != null) { 			try { 				br.close(); 			} catch (IOException e) { 				e.printStackTrace(); 			} 		} 	} 	System.out.println("Done");   } } | 
Здесь мы видим, что просто читаются строки и по символу запятая отделяется одно значение от другого. Все бы ничего, но у меня в одном из проектов требовалось читать строковые данные в которых было что? Правильно. Запятая 😉 Сам формат CSV предусматривает подобные ситуации, но для реализации потребуется написать гораздо больше кода.
Для ентерпрайзненьких решений, как было в моем случае, можно и подключить библиотеку, реализующую чтение из формата CSV. Мне понравилась библиотека opencsv. Она хоть и не обновлялась с 2011 года, но и формат тоже пылью покрылся. Из библиотеки на понадобится один класс CSVReader. У нас есть несколько конструкторов класса, которые позволяют задать разделитель, поток, из которого читаем данные, символ кавычек, экранирования и даже количество строк, которые нужно пропустить перед читаемыми данными.
Для получения данных можно использовать метод readAll который прочитает все строки сразу в список строк или же использовать метод readNext для построчного чтения данных. Так жые есть итератор в классе. В общем читаем документацию при необходимости. Ну и пример использования напоследок:
| 1 2 3 4 5 6 7 | String csvFile = "example.csv"; char cvsSplitBy = ';'; CSVReader reader = new CSVReader(new FileReader(csvFile),cvsSplitBy); String[] stringOfData; while ((stringOfData = reader.readNext()) != null) {   system.out.println(stringOfData[0]); } | 
выводим первый элемент данных в каждой строке CSV-файла.