Java-écriture de chaînes dans un fichier CSV

J'essaie d'écrire des données dans un fichier csv avec java, mais quand j'essaie d'ouvrir le fichier produit avec excel, je reçois une erreur disant que le fichier est corrompu. Lors de l'ouverture du fichier dans le bloc-notes, il semble être formaté correctement, donc je ne suis pas sûr de ce que le problème est. J'utilise la classe FileWriter pour sortir les données dans le fichier.

FileWriter writer = new FileWriter("test.csv");

writer.append("ID");
writer.append(',');
writer.append("name");
writer.append(',');
...
writer.append('n');

writer.flush();
writer.close();

Dois-je utiliser une bibliothèque en java pour imprimer dans un fichier csv? Je suppose que vous pourriez simplement le faire nativement en java tant que vous avez utilisé le mise en forme correcte.

Appréciez l'aide,

Shaw

27
demandé sur Patrizio Bertoni 2015-05-06 13:22:16

3 réponses

Fondamentalement, C'est parce que MS Excel ne peut pas décider comment ouvrir le fichier avec un tel contenu.

Lorsque vous mettez ID comme premier caractère dans un fichier de type feuille de calcul, il correspond à la spécification d'un fichier SYLK et MS Excel (et potentiellement d'autres applications de feuille de calcul) tente de l'ouvrir en tant que fichier SYLK. Mais en même temps, il ne répond pas à la spécification complète d'un fichier SYLK puisque le reste des valeurs du fichier sont séparées par des virgules. Par conséquent, l'erreur est illustré.

Pour résoudre le problème, modifiez "ID" à "id", cela devrait fonctionner comme prévu.

entrez la description de l'image ici

C'est bizarre. Mais, ouais!

Essayer également de minimiser l'accès aux fichiers en utilisant file object less.

J'ai testé et le code ci-dessous fonctionne parfaitement.

import java.io.File;
import java.io.FileNotFoundException;
import java.io.PrintWriter;


public class CSV {
    public static void main(String[]args) throws FileNotFoundException{
        PrintWriter pw = new PrintWriter(new File("test.csv"));
        StringBuilder sb = new StringBuilder();
        sb.append("id");
        sb.append(',');
        sb.append("Name");
        sb.append('\n');

        sb.append("1");
        sb.append(',');
        sb.append("Prashant Ghimire");
        sb.append('\n');

        pw.write(sb.toString());
        pw.close();
        System.out.println("done!");
    }
}
67
répondu Prashant Ghimire 2018-03-02 17:10:15
import java.io.File;
import java.io.FileNotFoundException;
import java.io.PrintWriter;

public class CsvFile {


public static void main(String[]args){
PrintWriter pw = null;
try {
    pw = new PrintWriter(new File("NewData.csv"));
} catch (FileNotFoundException e) {
    e.printStackTrace();
}
StringBuilder builder = new StringBuilder();
String ColumnNamesList = "Id,Name";
// No need give the headers Like: id, Name on builder.append
builder.append(ColumnNamesList +"\n");
builder.append("1"+",");
builder.append("Chola");
builder.append('\n');
pw.write(builder.toString());
pw.close();
System.out.println("done!");
}
}
8
répondu Tamil veera Cholan 2016-05-25 15:21:25
    String filepath="/tmp/employee.csv";
    FileWriter sw = new FileWriter(new File(filepath));
    CSVWriter writer = new CSVWriter(sw);
    writer.writeAll(allRows);

    String[] header= new String[]{"ErrorMessage"};
    writer.writeNext(header);

    List<String[]> errorData = new ArrayList<String[]>();
    for(int i=0;i<1;i++){
        String[] data = new String[]{"ErrorMessage"+i};
        errorData.add(data);
    }
    writer.writeAll(errorData);

    writer.close();
0
répondu Somuchandra 2018-08-17 17:30:29