Frage Java - Zeichenketten in eine CSV-Datei schreiben


Ich versuche, Daten in eine CSV-Datei mit Java zu schreiben, aber wenn ich versuche, die produzierte Datei mit Excel zu öffnen, erhalte ich einen Fehler, der sagt, dass die Datei beschädigt ist. Nach dem Öffnen der Datei im Editor scheint es richtig formatiert zu sein, so dass ich nicht sicher bin, was das Problem ist. Ich verwende die FileWriter-Klasse, um die Daten in die Datei auszugeben.

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

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

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

Muss ich eine Bibliothek in Java verwenden, um in eine CSV-Datei zu drucken? Ich nahm an, dass Sie dies in Java nativ machen könnten, solange Sie die korrekte Formatierung verwendet haben.

Schätze die Hilfe,

Shaw


25
2018-05-06 10:22


Ursprung


Antworten:


Grundsätzlich liegt es daran, dass MS Excel nicht entscheiden kann, wie die Datei mit diesem Inhalt geöffnet werden soll.

Wenn Sie setzen ID Als erstes Zeichen in einer Spreadsheet-Datei entspricht es der Spezifikation von a SYLK Datei und MS Excel (und möglicherweise andere Tabellenanwendungen) versucht, es als eine SYLK-Datei zu öffnen. Gleichzeitig erfüllt es jedoch nicht die vollständige Spezifikation einer SYLK-Datei, da die übrigen Werte in der Datei durch Kommas getrennt sind. Daher wird der Fehler angezeigt.

Um das Problem zu lösen, ändern Sie "ID" zu "id" und es sollte wie erwartet funktionieren.

enter image description here

Das ist seltsam. Aber ja!

Versuchen Sie auch, den Dateizugriff zu minimieren, indem Sie das Dateiobjekt weniger verwenden.

Ich habe getestet und der Code unten funktioniert perfekt.

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

63
2018-05-06 10:35



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
2018-05-25 15:21