web-dev-qa-db-fra.com

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

J'essaie d'écrire des données dans un fichier csv avec Java. Cependant, lorsque j'essaie d'ouvrir le fichier produit avec Excel, le message d'erreur indiquant que le fichier est corrompu est erroné. Lors de l'ouverture du fichier dans le bloc-notes, il semble être correctement formaté. Je ne suis donc pas sûr du problème. J'utilise la classe FileWriter pour exporter 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 dans Java pour imprimer dans un fichier csv? J'ai supposé que vous pouviez le faire de manière native dans Java tant que vous utilisiez le formatage approprié.

Apprécier l'aide,

Shaw

34
Shaw

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

Lorsque vous mettez ID en tant que premier caractère d'un fichier de type feuille de calcul, il correspond à la spécification d'un fichier SYLK et MS Excel (et éventuellement d'autres applications Spreadsheet) tente de l'ouvrir en tant que un fichier SYLK. Mais en même temps, il ne répond pas à la spécification complète d'un fichier SYLK car les autres valeurs du fichier sont séparées par une virgule. Par conséquent, l'erreur est affichée.

Pour résoudre le problème, changez "ID" en "id" et il devrait fonctionner comme prévu.

enter image description here

C'est bizarre. Mais ouais!

Aussi essayer de minimiser l'accès au fichier en utilisant moins l'objet de fichier.

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

import Java.io.File;
import Java.io.FileNotFoundException;
import Java.io.PrintWriter;

public class CsvWriter {
  public static void main(String[] args) {

    try (PrintWriter writer = 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');

      writer.write(sb.toString());

      System.out.println("done!");

    } catch (FileNotFoundException e) {
      System.out.println(e.getMessage());
    }

  }
}
80
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!");
}
}
9

Je pense que ceci est un code simple dans Java qui affichera la valeur de chaîne dans CSV après la compilation de ce code.

public class CsvWriter {

    public static void main(String args[]) {
        // File input path
        System.out.println("Starting....");
        File file = new File("/home/Desktop/test/output.csv");
        try {
            FileWriter output = new FileWriter(file);
            CSVWriter write = new CSVWriter(output);

            // Header column value
            String[] header = { "ID", "Name", "Address", "Phone Number" };
            write.writeNext(header);
            // Value
            String[] data1 = { "1", "First Name", "Address1", "12345" };
            write.writeNext(data1);
            String[] data2 = { "2", "Second Name", "Address2", "123456" };
            write.writeNext(data2);
            String[] data3 = { "3", "Third Name", "Address3", "1234567" };
            write.writeNext(data3);
            write.close();
        } catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();

        }

        System.out.println("End.");

    }
}
2
Samim Aktar
    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
Somuchandra