Lire fichier CSV puis traitement
Bonjour,
J'aimerais lire en entrée plusieurs fichiers CSV, puis pour chaque ligne crée une HashMap (ou mieux si vous pensez à autre chose), avec en clé la première ligne et en valeur les données de chaque ligne.
Pour le moment j'ai ce code la mais il ne fonctionne pas très bien...
PS : j'ai des valeurs vide dans le CSV.
Code:
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 55 56
| public class Ligne implements FilenameFilter{
public static void parseCSV(String filePath)throws IOException{
try{
FileReader fr = new FileReader(filePath);
// passe par un buffer pour simplifier la lecture du fichier
BufferedReader buf = new BufferedReader(fr);
// déclaration d'une chaîne de caractères afin de stocker la chaîne courante à chaque tour dans la boucle.
String ligneUne;
String ligne;
HashMap<String, String> map = new HashMap<String, String>();
//on lit la première ligne du fichier
ligneUne = buf.readLine();
ligne = buf.readLine();
// tant qu'il y a des lignes à lire (ligne != null)
String[] titre = ligneUne.split(";");
for (int j = 0 ; j < titre.length ; j++){
ligne = buf.readLine();
//while (ligne != null) {
// On découpe (split) la ligne à l'aide du séparateur
//les données sont stockées dans un tableau de
//chaine de caractètes
String[] tabChaine = ligne.split(";");
//on affiche les données en parcourant le tableau
for (int i = 0 ; i < tabChaine.length ; i++){
//on lit la ligne suivante
ligne = buf.readLine();
map.put(titre[i], tabChaine[i]);
System.out.println("Clé : " + map.keySet() + " Valeur : " + map.values());
}
//}
}
fr.close();
}
catch (FileNotFoundException e){
System.out.println("Le fichier est introuvable !");
}
catch (IOException e) {
System.out.println( e );
}
}
public boolean accept(File file, String name) {
return name.toLowerCase().endsWith(".csv");
}
public static void main(String args[]) throws IOException {
File root = new File("./input");
File[] files = root.listFiles(new CSVFilter());
for (File f : files) {
String fileName = f.toString();
parseCSV(fileName);
}
} |