171 votes

CSV API pour Java

Quelqu'un peut-il recommander une API simple qui me permettra d'utiliser lire un fichier d'entrée CSV, faire quelques transformations simples, puis l'écrire.

Un google rapide a trouvé http://flatpack.sourceforge.net/ qui semble prometteur.

Je voulais juste vérifier ce que les autres utilisent avant de me coupler à cette API.

87voto

Jay R. Points 6337

J'ai utilisé OpenCSV dans le passé.

import au.com.bytecode.opencsv.CSVReader;

String fileName = "data.csv";
CSVReader reader = new CSVReader(new FileReader(fileName ));

// si la première ligne de l'en-tête String[] header = reader.readNext();
// itération sur le lecteur.readNext jusqu'à ce qu'elle retourne null String[] line = reader.readNext();

Il y avait d'autres choix dans les réponses à une autre question.

34voto

kbg Points 341

Mise à jour: Le code dans cette réponse, c'est Super CSV 1.52. Mise à jour des exemples de code pour Super CSV 2.0.0 peut être trouvé sur le site web du projet: http://supercsv.sourceforge.net/examples_reading.html


Le SuperCSV projet prend directement en charge l'analyse et structuré de manipulation de CSV cellules. À partir de http://supercsv.sourceforge.net/codeExamples.html vous trouverez par exemple

étant donné une classe

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; }
}

et que vous avez un fichier CSV avec un en-tête. Supposons le contenu suivant

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

Vous pouvez ensuite créer une instance de la UserBean et de le remplir avec les valeurs de la deuxième ligne du fichier avec le code suivant

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();
    }
  }
}

à l'aide de la suite de "manipulation de spécification"

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
};

18voto

gnat Points 5565

Lecture format CSV description me fait penser que l'aide de la 3ème partie de la bibliothèque serait moins casse-tête que d'écrire moi-même:

Listes de wikipédia 10 ou quelque chose de connu bibliothèques:

J'ai comparé les libs sont indiqués à l'aide de une sorte de check-list. OpenCSV s'est avéré gagnant pour moi (YMMV) avec les résultats suivants:

+ maven

+ maven - release de la version
// eu quelques cryptique questions à Hudson avec le snapshot références => préfère être sur le côté sûr, un

+ exemples de code

+ open source
// comme dans "pouvez hack moi-même si nécessaire"

+ compréhensible javadoc
// contrairement par exemple à la documentation javadoc de genjava gj-csv

+ compact API
// YAGNI (note flatpack semble avoir beaucoup plus riche API que OpenCSV)

- référence à la spécification utilisée
// Je l'aime vraiment quand les gens peuvent expliquer ce qu'ils font

- la référence à la norme RFC 4180 soutien
// à qualifier forme la plus simple de spécification pour moi

- les communiqués de changelog
// absence est tout à fait dommage, vu comment simple ce serait de faire avec maven-modifications-plugin
// flatpack, par comparaison, a tout à fait utile changelog

+ suivi des bogues

+ active
// comme dans "pouvez envoyer un rapport de bogue et de s'attendre à une sortie fixe bientôt"

+ rétroaction positive
// Recommandé Par 51 utilisateurs sur sourceforge (dès à présent)

8voto

Mat Mannion Points 2072

Nous utilisons JavaCSV , ça marche plutôt bien

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X