Александр Горбач


программирование, админство

Чтение CSV-файла в Java

без комментариев

Для некоторого круга задач автоматизации обмена данными между различными приложениями необходимо работать с форматом CSV. Рассмотрим способы работы с этим форматом в Java.

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

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 для построчного чтения данных. Так жые есть итератор в классе. В общем читаем документацию при необходимости. Ну и пример использования напоследок:

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-файла.

Автор Sash(k)a

Апрель 9th, 2014 at 8:57 пп

Опубликовано в Без рубрики

Тэги ,

Оставьте комментарий

Яндекс.Метрика