2012-11-06 16 views
6

Ich möchte in eine temporäre Datei in einem Append-Modus schreiben. Ich sehe, dass die Datei erstellt wird, aber die Daten vom Stringbuffer werden nicht darauf geschrieben. Kann mir jemand sagen warum? Hier finden Sie den Code, den ich geschrieben habe,Schreiben in eine temporäre Datei in Java

public static void writeToFile(String pFilename, StringBuffer sb) 
     throws IOException { 

    String property = "java.io.tmpdir"; 


    String tempDir = System.getProperty(property); 

    File dir = new File(tempDir); 
    File filename = File.createTempFile(pFilename, ".tmp", dir); 
    FileWriter fileWriter = new FileWriter(filename.getName(), true); 
    System.out.println(filename.getName()); 
    BufferedWriter bw = new BufferedWriter(fileWriter); 
    bw.write(sb.toString()); 
    bw.close(); 
} 
+0

Woher wissen Sie, dass die Daten nicht darauf geschrieben werden? [Das 2-Argument 'File # createTempFile()'] (http://docs.oracle.com/javase/7/docs/api/java/io/File.html#createTempFile%28java.lang.String,%20java .lang.String% 29) Methode tut übrigens nichts, um das Verzeichnis anzugeben. –

+0

@Matt: Die Datei wird erstellt, aber ich sehe keine Daten in der Datei und es ist auch möglich, die Dateien erstellt, ohne die Zufallszahlen generiert werden. – user1688404

+0

Sind Sie sicher, dass Ihr StringBuffer-Inhalt keine Fehler enthält? Versuchen Sie und schreiben Sie ein "Hallo, Welt!" Zeichenfolge an die Datei. –

Antwort

5
FileWriter fileWriter = new FileWriter(filename.getName(), true); 

sollte

FileWriter fileWriter = new FileWriter(filename, true); 
+0

['FileWriter (String)'] (http://docs.oracle.com/javase/7/docs/api/java/io/FileWriter.html#FileWriter (java.lang.String)) existiert. Da 'Dateiname' in der Frage eine' Datei' ist, sollte dieser Konstruktor mit ['File.getAbsolutePath()'] (http://docs.oracle.com/javase/7/docs/api/java/io) arbeiten /File.html#getAbsolutePath()). –

+0

Auch FileWriter (String, boolean append) existiert also was auch immer tichodroma heißt ist korrekt –

+0

@Joop: Danke funktioniert .. aber ist es möglich, die Dateinamen generieren ohne die Zufallszahlen generiert – user1688404

0

Try bw.flush() vor dem Schließen der Schriftsteller zu nennen. Obwohl ich, dass Schriftsteller denken automatisch bündig nennen sollte geschlossen, bevor sie ...

0
FileWriter fileWriter = new FileWriter(filename.getName(), true); 

sollte

FileWriter fileWriter = new FileWriter(filename, true); 

Sie sich auch diese

verwenden können
FileWriter fileWriter = new FileWriter(filename.getAbsolutePath+filename.getName(), true); 

note

`filename.getName();` 

gibt das Fil zurück ename ohne den absoluten Pfad. Es kann also vorkommen, dass eine Datei im Present-Arbeitsverzeichnis erstellt wird und in diese geschrieben wird.

+0

Wie löst dies das Problem? –

1

seine Stattdessen Datei in temp-Verzeichnis zu erstellen, um die Datei in Ihrem Arbeitsverzeichnis erstellen und objFile.deleteOnExit() .Es wird verwendet auch als Erstellen der Datei in temp dir die gleichen Arbeit.

+1

Warum denken Sie, dass es eine bessere Idee ist, eine funktionierende temporäre Datei zu bekommen? –

+0

es ist nicht die bessere Idee, aber es ist eine Alternative, es wird funktionieren. – Vijay

+1

Eine temporäre Datei "sollte" auch funktionieren. –

4

Dies funktioniert:

public static void writeToFile(String pFilename, StringBuffer sb) throws IOException { 
    File tempDir = new File(System.getProperty("java.io.tmpdir")); 
    File tempFile = File.createTempFile(pFilename, ".tmp", tempDir); 
    FileWriter fileWriter = new FileWriter(tempFile, true); 
    System.out.println(tempFile.getAbsolutePath()); 
    BufferedWriter bw = new BufferedWriter(fileWriter); 
    bw.write(sb.toString()); 
    bw.close(); 
} 

Beachten Sie die Verwendung von FileWriter(File, boolean) und von System.out.println(tempFile.getAbsolutePath()).

Verwandte Themen