Dort gibt es auch einen CSVWriter, ich nehme an, dass er Daten in eine CSV Datei reinschreibt. Und dann habe ich mir überlegt, dass es vieleicht mit normalen FileWriter gehen wird. Der CSVReader orientiert sich ja an der ersten Zeile und an ; .Dann könnte ich bei jedem String noch ; hinzufügem bevor ich den in die Datei speichere. Würde gehen oder? Ist aber wahrscheinlich keine gute Lösung?
Ich habe erstmal ein File im csv Format angelegt und dort 3 Felder in die erste Zeile reingeschrieben: Benutzer;Fehlerpunkte;Ergebnis;
Die Datei heisst „liste.csv“
ich habe erstmal so angefangen:
import java.io.IOException;
import com.csvreader.CsvWriter;
public class Csv_Writer {
public static void main(String[] args) throws IOException {
CsvWriter csvWriter = new CsvWriter("liste.csv");
}
}
Jetzt brauche ich eine Methode die Daten in die richtigen Spalten reinschreibt. Ich nehme an dass ich writerRecords() benötige, nur habe ich nicht ganz verstanden wie man diese methode einsetzt. Ich habe versucht alle Methoden mit Google zu übersetzen, nur war die Übersetzung eigentlich nicht so toll, ich habe nicht wirklich verstanden was dort steht.
Soll ich das was ich vor habe, mit dieser Klasse machen? Kann mir jemand dabei bitte helfen?
er schreibt jetzt diesen Array rein, löscht aber alles was in der Datei steht.
Welche Methode brauche ich jetzt, damit er das nicht macht, sondern das in die nächste Zeile reinschreibt, ohne anderes zu löschen. Und zweite Frage, er trennt die Felder mit Komma, ich brauche aber ; . Wie kann ich das machen?
csvWriter.endRecord();
csvWriter.writeRecord(s);
csvWriter.endRecord();
csvWriter.close();```
Er schreibt jetzt zwar 2x s rein, aber er löscht alles was vorhin in der Datei stand. Und er soll das nicht löschen, wie könnte ich das machen?
Oho? Gut das kriege ich wahrscheinlich hin, aber ist das die einzige Möglichkeit? In meinem Fall ist das natürlich egal, die Datei wird ja klein sein, aber wenn die Datei so groß ist, wie die DB mit Songst und Sängern die du gesehen hast, wird das ganze bestimmt sehr unperformant sein.
joa aber was anderes kannst du mit der Klasse nicht anstellen (zumindest soweit ich das gesehen hab)
Deshalb nimmt mein bei großen Sachen auch Datenbanken und keine Dateien
Ich brauche doch deine Hilfe
Ich habe mir das so überlegt:
Ich nutzen den CSVReader um die Datei zu lesen, dann speichere das in Variablen und übergebe die dann an den CSVWriter damit er das in die Datei reinschreibt. War die Überlegung richtig? Die writeRecord Methode erwartet ein Array. Ich habe mir deshalb erstmal gedacht, ich speichere die Variablen ben, fehl, erg in ein Array. Also so was String s[] ={ben, fehl, erg}; Nur sagt er dann mir „The local variable ben may not have been initialized“, wenn ich versuche die Variable s an die Methode writeRecord zu übergeben. So und dann wollte ich die Strings aus dem anderem Programm(mein GUI Programm) mit Benutzername, Fehlerpunkten und „bestanden oder nicht“ in die Datei(liste.csv) auch reinschreiben. Ich habe im Moment keine Idee wie ich das machen könnte.
Ich habe so angefangen:
package driver;
import java.io.IOException;
import com.csvreader.CsvReader;
import com.csvreader.CsvWriter;
public class Csv_Writer {
public static void main(String[] args) throws IOException {
String ben, fehl, erg;
CsvReader reader = new CsvReader("liste.csv",';');
reader.readHeaders();
while(reader.readRecord()) {
ben = reader.get("Benutzername");
fehl = reader.get("Fehlerpunkte");
erg = reader.get("Ergebnis");
}
CsvWriter csvWriter = new CsvWriter("liste.csv");
csvWriter.writeRecord(/*..*/);
csvWriter.endRecord();
csvWriter.close();
}
}
ich weiß nicht genau was du da machen willst aber du liest eine Zeile ein und wenn du die nächste Zeile liest dann überschreibst du die Variablen mit der alten Zeile.
so sollte es gehen
package driver;
import java.io.IOException;
import com.csvreader.CsvReader;
import com.csvreader.CsvWriter;
import java.util.Vector;
public class Csv_Writer {
public static void main(String[] args) throws IOException {
CsvReader reader = new CsvReader("liste.csv",';');
reader.readHeaders();
Vector save = new Vector();
while(reader.readRecord()) {
save.add(reader.getValues());
}
CsvWriter csvWriter = new CsvWriter("liste.csv");
for(int i=0;i!=save.length;i++)
{
csvWriter.writeRecord((String[])save.get(i));
csvWriter.endRecord();
}
csvWriter.close();
}
}
Danke. Ich habe aber eine Frage, da ich mich mit Vektoren noch nicht auskenne, wollte ich das erstmal einfacher machen und ich habe mir gedacht, dass ich vieleicht mit normalen FileWriter in die Datei etwas reinschreibe, nur habe ich hier das gleiche Problem, dass er alles anderes was in der Datei stand, überschreibt. Kann man vieleicht in diesem Fall das irgendwie umgehen?
package driver;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
public class Fileschreiber {
public static void main(String[] args) throws IOException {
FileWriter fw = new FileWriter("liste.csv");
PrintWriter pw = new PrintWriter(fw);
pw.println("JohnDepp;20 Fehlerpunkte;nichtbestanden;");
pw.close();
}
}```
Der CSV Reader kann die Datei lesen, solange die Form stimmt. Also oben die Felder und unten die Werte durch ; getrennt.
Danke
das hab ich dir doch schonmal geschrieben, du musst die Datei erstmal auslesen dir die Werte speichern und dann die Sachen reinschreiben oder du verwendest RandomAccessFile
der filewriter hat als konstruktor noch die option ein boolean mitzugeben, ob der existierende Text ueberschrieben werden soll oder das neue einfach angehaengt werden soll