
Schau
Ich versuche, Daten mit Java in eine CSV-Datei zu schreiben, aber wenn ich versuche, die erzeugte Datei mit Excel zu öffnen, erhalte ich eine Fehlermeldung, die besagt, dass die Datei beschädigt ist. Beim Öffnen der Datei im Editor scheint sie korrekt formatiert zu sein, daher bin ich mir nicht sicher, 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, Sie könnten dies einfach nativ in Java tun, solange Sie die richtige Formatierung verwenden.
Schätze die Hilfe,
Schau

Prashant G
Im Grunde liegt es daran, dass MS Excel nicht entscheiden kann, wie die Datei mit solchen Inhalten geöffnet werden soll.
Wenn Sie setzen ID
als erstes Zeichen in einer Datei vom Typ Spreadsheet entspricht es der Spezifikation von a SYLK Datei und MS Excel (und möglicherweise andere Tabellenkalkulations-Apps) versuchen, sie als SYLK-Datei zu öffnen. Gleichzeitig erfüllt es jedoch nicht die vollständige Spezifikation einer SYLK-Datei, da die restlichen 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.

Das ist seltsam. Aber ja!
Versuchen Sie auch, den Dateizugriff zu minimieren, indem Sie weniger Dateiobjekte verwenden.
Ich habe es getestet und der folgende Code funktioniert perfekt.
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("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());
}
}
}

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

Samim Aktar
Ich denke, dies ist ein einfacher Code in Java, der den Zeichenfolgenwert in CSV anzeigt, nachdem dieser Code kompiliert wurde:
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) {
e.printStackTrace();
}
System.out.println("End.");
}
}
private static final String FILE_HEADER ="meter_Number,latestDate";
private static final String COMMA_DELIMITER = ",";
private static final String NEW_LINE_SEPARATOR = "\n";
static SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:m m:ss");
private void writeToCsv(Map<String, Date> meterMap) {
try {
Iterator<Map.Entry<String, Date>> iter = meterMap.entrySet().iterator();
FileWriter fw = new FileWriter("smaple.csv");
fw.append(FILE_HEADER.toString());
fw.append(NEW_LINE_SEPARATOR);
while (iter.hasNext()) {
Map.Entry<String, Date> entry = iter.next();
try {
fw.append(entry.getKey());
fw.append(COMMA_DELIMITER);
fw.append(formatter.format(entry.getValue()));
fw.append(NEW_LINE_SEPARATOR);
} catch (Exception e) {
e.printStackTrace();
} finally {
iter.remove();
}
}
} catch (Exception e) {
e.printStackTrace();
}
}

Gabriel Arghire
Die Antwort auf diese Frage ist gut, wenn Sie Ihre Datei jedes Mal überschreiben möchten, wenn Sie Ihr Programm erneut ausführen, aber wenn Sie möchten, dass Ihre Aufzeichnungen nicht verloren gehen Wiederholung Ihr Programm, können Sie dies versuchen
public void writeAudit(String actionName) {
String whereWrite = "./csvFiles/audit.csv";
try {
FileWriter fw = new FileWriter(whereWrite, true);
BufferedWriter bw = new BufferedWriter(fw);
PrintWriter pw = new PrintWriter(bw);
Date date = new Date();
pw.println(actionName + "," + date.toString());
pw.flush();
pw.close();
} catch (FileNotFoundException e) {
System.out.println(e.getMessage());
} catch (IOException e) {
e.printStackTrace();
}
}

GeheimagentMan
Ich sehe, Sie haben bereits eine Antwort, aber hier ist eine andere Antwort, vielleicht sogar noch schneller. Eine einfache Klasse, um eine Liste von Objekten zu übergeben und entweder eine CSV- oder Excel-Datei oder eine kennwortgeschützte ZIP-CSV-Datei oder Excel-Datei abzurufen.
https://github.com/ernst223/spread-sheet-exporter
SpreadSheetExporter spreadSheetExporter = new SpreadSheetExporter(List<Object>, "Filename");
File fileCSV = spreadSheetExporter.getCSV();

Danny Escalante
Generate CSV file from List of Objects
Finally, following is an example showing how to generate a CSV file from List of objects. The example uses the MyUser class defined in the previous section -
import com.opencsv.CSVWriter;
import com.opencsv.bean.StatefulBeanToCsv;
import com.opencsv.bean.StatefulBeanToCsvBuilder;
import com.opencsv.exceptions.CsvDataTypeMismatchException;
import com.opencsv.exceptions.CsvRequiredFieldEmptyException;
import java.io.IOException;
import java.io.Writer;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.List;
public class OpenCSVWriter {
private static final String STRING_ARRAY_SAMPLE = "./example.csv";
public static void main(String[] args) throws IOException,
CsvDataTypeMismatchException,
CsvRequiredFieldEmptyException {
try ( Writer writer = Files.newBufferedWriter(Paths.get(STRING_ARRAY_SAMPLE));
) {
StatefulBeanToCsv<MyUser> beanToCsv = new StatefulBeanToCsvBuilder(writer)
.withQuotechar(CSVWriter.NO_QUOTE_CHARACTER)
.build();
List<MyUser> myUsers = new ArrayList<>();
myUsers.add(new MyUser("Sundar Pichai ♥", "[email protected]", "+1-1111111111", "India"));
myUsers.add(new MyUser("Satya Nadella", "[email protected]", "+1-`enter code here`1111111112", "India"));
beanToCsv.write(myUsers);
}
}
}
10183300cookie-checkCSV-Datei mit “ID” als erstes Element ist in Excel beschädigtyes
Extrahieren Sie für den Anfang eine Methode zum Schreiben einer einzelnen Zeile und ersetzen Siewriter.append(‘\n’) durchwriter.newLine(). Denn newLine ist betriebssystemabhängig.
– Beri
6. Mai 2015 um 10:26 Uhr
Haben Sie versucht, die CSV-Datei mit Excel mit Text oder dem Datenimport-Assistenten auf der Registerkarte „Daten“ zu öffnen? Gleiche Corrput-Datei?
– Exodus
6. Mai 2015 um 10:40 Uhr