warum schreibt BufferedWriter nicht in der Datei?
-
09-10-2019 - |
Frage
Hier ist der Code-Schnipsel.
read = new FileReader("trainfiles/"+filenames[i]);
br = new BufferedReader(read);
while((lines = br.readLine())!=null){
st = new StringTokenizer(lines);
while(st.hasMoreTokens()){
bw = new BufferedWriter(new FileWriter("files/file.txt"));
bw.write(st.nextToken());
bw.newLine();
}
}
Edit: Ich lese Dateien aus einem Verzeichnis. Also, ich brauche in jeder Schleife um den Leser zu öffnen. Ich habe einige Änderungen vorgenommen, aber dann auch ist sie nicht auf diese Datei zu schreiben. Hier ist der Code:
for(i=0;i==0;i++){
if(filenames[i].matches(".*ham.*")){
System.out.println("ham:"+filenames[i]);
read = new FileReader("trainfiles/"+filenames[i]);
br = new BufferedReader(read);
while((lines = br.readLine())!=null){
st = new StringTokenizer(lines);
while(st.hasMoreTokens()){
System.out.println(st.nextToken());
bw.write(st.nextToken());
}
}
bw.close();
br.close();
}else{
System.out.println("spam:"+filenames[i]);
}
}
edit: Ich änderte den Code, aber kein Erfolg,
while((lines = br.readLine())!=null){
st = new StringTokenizer(lines);
bw = new BufferedWriter(new FileWriter("files/file.txt"));
while(st.hasMoreTokens()){
System.out.println(st.nextToken());
bw.write(st.nextToken());
}
bw.close();
}
br.close();
Und ich bin immer diese Fehlermeldung: Exception in thread "main" java.util.NoSuchElementException
at java.util.StringTokenizer.nextToken(StringTokenizer.java:332)
at Test.main(Test.java:30)
edit: Danke Jungs .. ich es herausgefunden. Eigentlich habe ich eine Verzeichnis in Eclipse und ich habe aufzufrischen es nicht um den Inhalt zu sehen. Sein dumm ... anyways.thanks viel
Lösung
- Sie haben die FileWritter innerhalb der Schleife zu schaffen, so dass Sie immer die Datei in jedem Zyklus gestutzt.
- Sie haben vergessen zu schließen / spülen writter
- Aber mit etwas Glück (das Programm beendet werden kann den writter bündig verursachen) die Datei das letzte Wort Ihrer Eingabedatei enthalten würde, die ich nur eine neue Linie wäre erraten kann und Sie wahrscheinlich verpaßt, wenn Sie die Datei geöffnet bis zu überprüfen Sie den Inhalt.
Ihre innere Schleife in etwa so sein sollte:
try (BufferedWriter bw = new BufferedWriter(new FileWriter("file.txt"))) {
while (st.hasMoreTokens()) {
bw.write(st.nextToken());
bw.newLine();
}
}
Andere Tipps
Ein paar Dinge:
- Sie einen neuen Filewriter jedes Mal durch die Schleife zu schaffen, die die Datei jedes Mal werden gestutzt.
- BufferedWriter wird gepuffert und Sie Spülung nie den Puffer. Sie müssen entweder Anruf bw.flush (), oder noch besser, in der Nähe der Schriftsteller, wenn Sie fertig.
Im Idealfall sollten Sie Constructor folgender FileWriter
zu erstellen,
bw = new BufferedWriter(new FileWriter("files/file.txt",true));
Der zweite Parameter, true
ist es, die neuen Daten zum Anhängen. FileWriter
werden Ihre vorherigen Schreib gestutzt.
und Ihre Leser werden in der Lage sein, geeignete Daten zu lesen.