web-dev-qa-db-fra.com

Lecture d’une colonne à partir d’un fichier CSV avec JAVA

Salut, je suis en train de lire un fichier CSV appelé test.csv in Java. Voici mon code:

import Java.io.BufferedReader;
import Java.io.FileReader;

public class InsertValuesIntoTestDb {

    @SuppressWarnings("rawtypes")
    public static void main(String[] args) throws Exception {
                String splitBy = ",";
        BufferedReader br = new BufferedReader(new FileReader("test.csv"));
        String line = br.readLine();
        while(line!=null){
             String[] b = line.split(splitBy);
             System.out.println(b[0]);
        }
        br.close();

  }
}

Ceci est mon fichier CSV (test.csv):

a,f,w,b,numinst,af,ub
1RW,800,64,22,1,48:2,true
1RW,800,16,39,1,48:2,true
1RW,800,640,330,1,48:2,true
1RW,800,40,124,1,48:2,true
1RW,800,32,104,1,48:2,true
1RW,800,8,104,1,48:2,true
1R1W,800,65536,39,1,96:96,true
1R1W,800,2048,39,1,96:96,true
1R1W,800,8192,39,1,48:48,true

J'essaie d'imprimer la première colonne du csv, mais le résultat obtenu n'est que a dans une boucle infinie. Quelqu'un peut-il m'aider s'il vous plaît à corriger ce code pour imprimer toute la première colonne. Merci.

22
Newbie

Lire l'entrée en continu dans la boucle afin que la variable line se voit attribuer une valeur autre que la valeur initiale

while ((line = br.readLine()) !=null) {
  ...
}

De côté: Ce problème a déjà été résolu à l'aide de bibliothèques CSV telles que OpenCSV . Voici des exemples pour lecture et écriture fichiers CSV

16
Reimeus

Si vous utilisez Java 7 + , vous pouvez utiliser NIO.2 , par exemple:

Code:

public static void main(String[] args) throws Exception {

    File file = new File("test.csv");

    List<String> lines = Files.readAllLines(file.toPath(), 
            StandardCharsets.UTF_8);

    for (String line : lines) {
        String[] array = line.split(",", -1);
        System.out.println(array[0]);
    }

}

Sortie:

a
1RW
1RW
1RW
1RW
1RW
1RW
1R1W
1R1W
1R1W
18
Paul Vargas

La division par virgule ne fonctionne pas tout le temps, par exemple si vous avez un fichier csv comme

"Name" , "Job" , "Address"
"Pratiyush, Singh" , "Teacher" , "Berlin, Germany"

Donc, je recommanderais d’utiliser l’API Apache Commons CSV :

    Reader in = new FileReader("input1.csv");
    Iterable<CSVRecord> records = CSVFormat.Excel.parse(in);
    for (CSVRecord record : records) {
      System.out.println(record.get(0));
    }
16

Vous ne changez pas la valeur de la ligne. Cela devrait être quelque chose comme ça.

import Java.io.BufferedReader;
import Java.io.FileReader;

public class InsertValuesIntoTestDb {

  @SuppressWarnings("rawtypes")
  public static void main(String[] args) throws Exception {
      String splitBy = ",";
      BufferedReader br = new BufferedReader(new FileReader("test.csv"));
      while((line = br.readLine()) != null){
           String[] b = line.split(splitBy);
           System.out.println(b[0]);
      }
      br.close();

  }
}

readLine renvoie chaque ligne et renvoie null s'il ne reste plus rien. Le code ci-dessus définit line et vérifie ensuite si elle est null.

3
Matt Rink