Вопрос-ответ

CSV API for Java [closed]

CSV API для Java [закрыт]

Кто-нибудь может порекомендовать простой API, который позволит мне использовать чтение входного файла CSV, выполнить несколько простых преобразований, а затем записать его.

Быстрый поиск в Google http://flatpack.sourceforge.net / который выглядит многообещающим.

Я просто хотел проверить, что используют другие, прежде чем подключу себя к этому API.

Переведено автоматически
Ответ 1

Я использовал OpenCSV в прошлом.

import au.com.bytecode.opencsv.CSVReader;

String fileName = "data.csv";
CSVReader reader = новый CSVReader (новый FileReader (имя файла));



// если первая строка является строкой заголовка[] header = reader.readNext();
// перебирайте reader.readNext до тех пор, пока он не вернет нулевую строку[] line = reader.readNext();

В ответах на другой вопрос были и другие варианты.

Ответ 2

Apache Commons CSV

Ознакомьтесь с Apache Common CSV.

Эта библиотека считывает и записывает несколько вариантов CSV, включая стандартный RFC 4180. Также считывает / записывает файлы, разделенные табуляцией.


  • Excel

  • InformixUnload

  • InformixUnloadCsv

  • MySQL

  • Oracle

  • PostgreSQLCsv

  • PostgreSQLText

  • RFC4180

  • TDF

Ответ 3

Обновление: Код в этом ответе предназначен для Super CSV 1.52. Обновленные примеры кода для Super CSV 2.4.0 можно найти на веб-сайте проекта: http://super-csv.github.io/super-csv/index.html


Проект SuperCSV напрямую поддерживает синтаксический анализ и структурированные манипуляции с ячейками CSV. Из http://super-csv.github.io/super-csv/examples_reading.html вы найдете, например

задан класс

public class UserBean {
String username, password, street, town;
int zip;

public String getPassword() { return password; }
public String getStreet() { return street; }
public String getTown() { return town; }
public String getUsername() { return username; }
public int getZip() { return zip; }
public void setPassword(String password) { this.password = password; }
public void setStreet(String street) { this.street = street; }
public void setTown(String town) { this.town = town; }
public void setUsername(String username) { this.username = username; }
public void setZip(int zip) { this.zip = zip; }
}

и что у вас есть CSV-файл с заголовком. Предположим, что следующее содержимое

username, password,   date,        zip,  town
Klaus, qwexyKiks, 17/1/2007, 1111, New York
Oufu, bobilop, 10/10/2007, 4555, New York

Затем вы можете создать экземпляр UserBean и заполнить его значениями из второй строки файла с помощью следующего кода

class ReadingObjects {
public static void main(String[] args) throws Exception{
ICsvBeanReader inFile = new CsvBeanReader(new FileReader("foo.csv"), CsvPreference.EXCEL_PREFERENCE);
try {
final String[] header = inFile.getCSVHeader(true);
UserBean user;
while( (user = inFile.read(UserBean.class, header, processors)) != null) {
System.out.println(user.getZip());
}
} finally {
inFile.close();
}
}
}

используя следующую "спецификацию манипулирования"

final CellProcessor[] processors = new CellProcessor[] {
new Unique(new StrMinMax(5, 20)),
new StrMinMax(8, 35),
new ParseDate("dd/MM/yyyy"),
new Optional(new ParseInt()),
null
};
Ответ 4

Чтение описания формата CSV заставляет меня почувствовать, что использование сторонней библиотеки было бы меньшей головной болью, чем написание ее самому:

В Википедии перечислены 10 или около того известных библиотек:

Я сравнил перечисленные библиотеки, используя что-то вроде контрольного списка. OpenCSV оказался для меня победителем (YMMV) со следующими результатами:

+ maven

+ maven - release version // had some cryptic issues at _Hudson_ with snapshot references => prefer to be on a safe side

+ code examples

+ open source // as in "can hack myself if needed"

+ understandable javadoc // as opposed to eg javadocs of _genjava gj-csv_

+ compact API // YAGNI (note *flatpack* seems to have much richer API than OpenCSV)

- reference to specification used // I really like it when people can explain what they're doing

- reference to _RFC 4180_ support // would qualify as simplest form of specification to me

- releases changelog // absence is quite a pity, given how simple it'd be to get with maven-changes-plugin // _flatpack_, for comparison, has quite helpful changelog

+ bug tracking

+ active // as in "can submit a bug and expect a fixed release soon"

+ positive feedback // Recommended By 51 users at sourceforge (as of now)
2023-03-22 04:31 java