Also mein Problem ist das ich zwar aus einer CSV-Datei lesen kann aber jedoch nicht in eine schreiben.
Es steht dabei keine Fehlermeldung das die Datei nicht gefunden wurde, jedoch wenn ich nach dem Ausführen des programms in die CSV datei schau ist die leer.
Ich weiß nicht was ich dabei falsch mache.
Das wäre mein Quelltext:
Java:
publicclassMain{/**
* @param args the command line arguments
*/publicstaticvoidmain(String[] args){try{BufferedReader f;String line;int i =1;FileWriter f1;
f1 =newFileWriter("ausgabedatei.csv");try{
f =newBufferedReader(newFileReader("Dateipfad"));while((line = f.readLine())!=null){System.out.println(i +" "+ line);String s1 = i + line;BufferedWriter bw =newBufferedWriter(newFileWriter("ausgabedatei.csv"));
bw.write(s1);
i++;}
f.close();
f1.close();}catch(IOException e){System.out.println("Fehler beim Lesen der Datei");}}catch(IOException ex){Logger.getLogger(Main.class.getName()).log(Level.SEVERE,null, ex);}}}
Ich arbeite mit Netbeans und die CSV-Dateien habe ich direkt im Projekt angelegt.
2 Fehler:
a) Du überschreibst deine Ausgabedatei bei jedem Durchlauf
b) Du schließt nirgendwo die Ausgabe ab, d.h. der BufferedWriter schreibt nie in die Datei -> leer
PS: Wenn du weist dass manche unnötig sind, wieso lässt du diese dann nicht weg?!
Hallo,
das Überschreiben vermeidest du, indem du den BufferedWriter außerhalb der Schleife initialisierst und nur das eigentliche Lesen und Schreiben innerhalb der Schleife behandelst.
bitte für die Zukunft bedenken:
- muss ich mein Programm gleich mit einer 5000-Zeilen-Datei testen? reichen nicht 50 oder gar erstmal nur 3?
- poste ich einen Teil meines Programms mit unbekannten Variablen, mit unnötigen Blahblah wie 30 Zeilen zum Thema Programm-beenden, ein nicht verwendetes new DecimalFormat("#,##0.00") oder unnötiger Exception-Behandlung,
oder versuche ich ein kurzes für jeden verständliches Testprogramm zu erstellen
Okay danke schön . Tut mir leid ich wollte Anfangs nur den Fehler verursachenden Code hinschreiben war aber unsicher und hab deswegen alles reingeschrieben.
Ich komme mit diesen ganzen Möglichkeiten nicht zurecht
RandomAccessFile
FileWriter
Buffered
;(
Ich möchte doch eigentlich nur immer mal wieder Daten in eine CSV Datei schreiben, im Stil
babla;blabla;blabla;
Dafür baue ich mit mittels der getMethoden eines Objectes einene String mit Trennzeichen ";" aber ich habe keinen Plan wie ich denn in eine Datei schreiben kann.
Wenn ich das mit in meine While Schleife packe, dann erzeugt er ja immer einen neuen BufferedReader oder?
Java:
privatebooleanschreibeDaten(VectorPersonenVector){boolean status =false;//Rückgabewert wird true falls geschrieben werden konnteStringSpeicherString="wenn Sie dies in der Datei lesen ist ein Fehler passiert";Iterator iti =PersonenVector.iterator();//Zeiger zum "Durchwandern" des Vectors "alternativ" zur for-SchleifeBufferedWriter bw;try{
bw =newBufferedWriter(newFileWriter("ausgabedatei.csv"));}catch(Exception e){}while(iti.hasNext()){Person einePerson=(Person)iti.next();SpeicherString=einePerson.getAnrede()+";"+einePerson.getName()+";"+einePerson.getVorname()+";"+einePerson.getStrasse()+";"+einePerson.getPLZ()+";"+einePerson.getOrt()+";"+einePerson.getTelefon()+";"+einePerson.getFax()+";"+einePerson.getBemerkung()+"\n";// ; ist Trennzeichen, evtl durch globale Variable ersetzentry{
bw =newBufferedWriter(newFileWriter("ausgabedatei.csv"));
bw.write(SpeicherString);}catch(IOException e){}}return status;}
stimmt, das erste try/catch könnte zu einem nicht-initialsierten bw führen,
schreibe in Zeile 5
BufferedWriter bw = null;
dann bekommst du im Fehlerfall schlimmstenfalls eine NullPointerException,
oder verwende nur ein try/ catch um den gesamten Code
FileWriter legt eine Datei an wie RandomAccessFile auch
und hier fuer nachfolgende Generationen
PersonenVector enthält Objecte vom Typ Person (Eigenbau)
Java:
privatebooleanschreibeDaten(VectorPersonenVector){boolean status =false;//Rückgabewert wird true falls geschrieben werden konnteStringSpeicherString="wenn Sie dies in der Datei lesen ist ein Fehler passiert";Iterator iti =PersonenVector.iterator();//Zeiger zum "Durchwandern" des Vectors "alternativ" zur for-SchleifeBufferedWriter bw =null;try{
bw =newBufferedWriter(newFileWriter(DateiName));//Dateiname ist ein String "meineDatei.csv"while(iti.hasNext()){Person einePerson=(Person)iti.next();SpeicherString=einePerson.getAnrede()+";"+einePerson.getName()+";"+einePerson.getVorname()+";"+einePerson.getStrasse()+";"+einePerson.getPLZ()+";"+einePerson.getOrt()+";"+einePerson.getTelefon()+";"+einePerson.getFax()+";"+einePerson.getBemerkung()+"\n";// ; ist Trennzeichen, evtl durch globale Variable ersetzen
bw.write(SpeicherString);//String schreiben
bw.flush();//Puffer leeren}
bw.close();//BufferWriter schliessen
status=true;}catch(Exception e){}return status;}