9 Stimmen

Warum schreibt BufferedWriter nicht in die Datei?

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();
                    }
                }

Bearbeiten: Ich lese Dateien aus einem Verzeichnis. Deshalb muss ich den Reader in jeder Schleife öffnen. Ich habe einige Änderungen vorgenommen, aber es schreibt trotzdem nicht in diese Datei. 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]);
            }
                        }

Bearbeiten: Ich habe den Code geändert, jedoch ohne 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 bekomme diesen Fehler: Ausnahme im Thread "main" java.util.NoSuchElementException bei java.util.StringTokenizer.nextToken(StringTokenizer.java:332) bei Test.main(Test.java:30)

Bearbeiten: Danke Leute.. Ich habe es herausgefunden. Tatsächlich habe ich ein Verzeichnis in eclipse erstellt und habe es nicht aktualisiert, um den Inhalt zu sehen. Das ist albern... trotzdem vielen Dank

17voto

Darron Punkte 20861

Ein paar Dinge:

  1. Du erstellst jedes Mal im Loop einen neuen FileWriter, was die Datei jedes Mal abschneidet.
  2. BufferedWriter ist gepuffert und du spülst den Puffer nie. Du musst entweder bw.flush() aufrufen oder noch besser den Writer schließen, wenn du fertig bist.

15voto

Tiago Punkte 934
  • Sie erstellen den FileWritter innerhalb der Schleife, sodass die Datei in jedem Durchlauf immer abgeschnitten wird.
  • Sie haben vergessen, den Writer zu schließen / zu leeren.
  • Aber mit etwas Glück (das Beenden des Programms könnte dazu führen, dass der Writer geleert wird) würde die Datei das letzte Wort Ihrer Eingabedatei enthalten, das ich nur vermuten kann, dass es eine neue Zeile ist und Sie es wahrscheinlich übersehen haben, als Sie die Datei geöffnet haben, um den Inhalt zu überprüfen.

Ihre innere Schleife sollte ungefähr so aussehen:

try (BufferedWriter bw = new BufferedWriter(new FileWriter("file.txt"))) {
    while (st.hasMoreTokens()) {
        bw.write(st.nextToken());
        bw.newLine();
    }
}

1voto

dmv Punkte 155

Idealerweise sollten Sie den folgenden Konstruktor verwenden, um FileWriter zu erstellen,

bw = new BufferedWriter(new FileWriter("files/file.txt", true));

Der zweite Parameter, true, dient zum Anfügen der neuen Daten. FileWriter wird Ihre vorherigen Schreibvorgänge nicht abschneiden.

und Ihr Leser wird in der Lage sein, die richtigen Daten zu lesen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X