2012-03-23 14 views
1

Ich kann nicht scheinen, in eine Datei zu schreiben. Ich erstelle die Datei und das Verzeichnis erfolgreich, und ich treffe keine Ausnahmen, aber wenn ich die Datei öffne, sind keine Zeilen darauf geschrieben.Java File IO Schreiben

Ist es möglich, dass ich Änderungen an der Datei irgendwie speichern muss? Oder gibt es eine andere Möglichkeit, dass ich die Veränderung nicht sehen kann, obwohl sie angeblich gemacht wurde?

Ich bekomme keine Fehler ausgedruckt, und ich erreiche "Schreiben zu Protokoll" erfolgreich.

+1

Wie digitaljoel sagte, schreiben BufferedWriters nur in einen internen Puffer. Der Puffer wird beim Aufruf von flush() in den zugrunde liegenden FileWriter geschrieben. – Alderath

Antwort

6

Sie müssen den Schreiber schließen. Ändere die letzten paar Zeilen dazu.

//Record to log 
try{ 
    writer.write("test log message"); 
    writer.close(); 
}catch(Exception e){ 
    System.err.println("could not write to log"); 
    e.printStackTrace(); 
} 

Alles, was ich tat, war die writer.close() hinzufügen.

+0

Sollte nicht ein 'writer.flush()' vor dem Schließen stehen? – jzworkman

+0

Müssen Sie es vor jedem Schreiben wieder öffnen? – Porthos3

+3

@jzworkman 'close()' automatisch flushed – sblundy

1

Wenn das alles von Ihrer Quelle ist, werden Sie nie spülen und den gepufferten Schreiber schließen.

+0

-1: Dies sollte ein Kommentar sein. – millimoose

+1

@Indialog Warum sollte es ein Kommentar sein? Es zeigt knapp, dass er den gepufferten Schreiber löschen muss, was die Lösung des Problems ist. – Alderath

+0

@Alderath Die Antwort scheint während der Zeit, in der ich den Downvote gespielt habe, bearbeitet worden zu sein; Ich werde es entfernen. – millimoose

0

Sie müssen nach dem Schreiben in den gepufferten Stream writer.flush() aufrufen. Stellen Sie sicher, den Schreiber zu schließen, wenn Sie fertig sind! Versuchen:

... 
System.out.println("writing to log"); 
//Record to log 
     try{ 
      writer.write("test log message"); 
      writer.flush(); 
      writer.close(); 
     }catch(Exception e){ 
      System.err.println("could not write to log"); 
      e.printStackTrace(); 
     } 

Edit: Wie pro sblundy Antwort, in diesem Fall ein Aufruf an close() ausreicht, um den Strom zu spülen und zu schließen. Im Allgemeinen möchten Sie flush() verwenden, um korrekt in den zugrunde liegenden Dateischreiber zu schreiben, und close(), um den Stream zu schließen.

1

Sie müssen die Schriftsteller schließen, um sicherzustellen, alle werden die Daten

geschrieben
try{ 
     writer.write("test log message"); 
     writer.flush(); // <--- optional 
    }catch(Exception e){ 
     System.err.println("could not write to log"); 
     e.printStackTrace(); 
    } 

// after you recorded everything, close your writer 
finally { 
try { 
    writer.close(); 
} catch(IOException ioex) { } 
} 
0

Versuchen Sie, \ n Symbol zum Ende der Zeichenfolge hinzufügen.

writer.write("test log message\n");