Java - Écrire un Fichier CSV avec Apache.commons.csv
Je suis en utilisant le apache.commons.csv bibliothèque en Java. Je suis en train de lire un fichier CSV à partir d'une page web avec ce code:
InputStream input = new URL(url).openStream();
Reader reader = new InputStreamReader(input, "UTF-8");
defaultParser = new CSVParser(reader, CSVFormat.DEFAULT);
excelParser = new CSVParser(reader, CSVFormat.EXCEL.withHeader());
defaultParsedData = defaultParser.getRecords();
excelParsedData = excelParser.getRecords();
Cependant, je ne peux pas trouver une méthode dans cette bibliothèque pour facilement écrire ce fichier sur mon ordinateur afin de l'ouvrir et de lire de suite.
J'ai essayé ce code pour enregistrer le fichier.
String outputFile = savePath+".csv";
CSVPrinter csvFilePrinter = null;
CSVFormat csvFileFormat = CSVFormat.EXCEL.withHeader();
FileWriter fileWriter = new FileWriter(outputFile);
csvFilePrinter = new CSVPrinter(fileWriter, csvFileFormat);
for (CSVRecord csvRecord : excelParser) {
for(String dataPoint: csvRecord){
csvFilePrinter.print(dataPoint);
}
csvFilePrinter.print('\n');
}
fileWriter.flush();
fileWriter.close();
csvFilePrinter.close();
Cependant, lorsque je tente de lire le fichier avec ce code, rien ne s'imprime:
InputStream input = new FileInputStream(cvsFilePath);
Reader reader = new InputStreamReader(input, "UTF-8");
CSVParser load = new CSVParser(reader, CSVFormat.EXCEL);
//TEST THAT IT WORKED
java.util.List<CSVRecord> testlist = load.getRecords();
CSVRecord dataPoint = testlist.get(0);
System.out.println("print: " + dataPoint.get(0));
Ce n'imprime que "impression:"
Si j'ajoute
System.out.println("print: " + dataPoint.get(1));
il donne une
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1
Quand j'ai ouvert le CSV sauvegardé le fichier avec le bloc-notes il y a une ligne vide, puis:
2016-03-04,714.98999,716.48999,706.02002,710.890015,1967900,710.890015,"
",2016-03-03,718.679993,719.450012,706.02002,712.419983,1956800,712.419983," ",2016-03-02,719.00,720.00,712.00,718.849976,1627800,718.849976,"
Eh bien, je suis sûr que je n'ai pas écrit le code correctement. Le fichier qui enregistre n'est pas le même fichier que pour lire une page web. J'ai pensé que il devrait y avoir une simple méthode intégrée dans Apache Commons pour enregistrer un fichier dans un analyseur syntaxique, mais je ne pouvais pas en trouver un, j'ai donc tenté de le faire de cette façon.
Pourriez-vous montrer un exemple de l'entrée et de la sortie ?
J'obtiens une erreur "le Fichier n'est pas chargé complètement" quand j'essaie de l'ouvrir dans Excel. J'ai mis à jour l'OP avec le code que j'utilise pour lire à partir du fichier sauvegardé.
L'ouvrir avec un simple éditeur de texte (bloc-notes, que ce soit..) et coller le contenu dans votre question .
OriginalL'auteur jonbon | 2016-03-29
Vous devez vous connecter pour publier un commentaire.
Il ressemble à de l'impression de tous les dossiers sur la même ligne .
D'autres méthodes comme la printRecords sera plus utile :
OriginalL'auteur Arnaud
Avez-vous essayé de rinçage et de fermeture de la CSVPrinter, pas le FileWriter?
OriginalL'auteur Ion Freeman