2012-11-06 24 views
6

Desidero scrivere su un file temporaneo in modalità di aggiunta. Vedo che il file è stato creato ma i dati dal Stringbuffer non vengono scritti su di esso. Qualcuno può dirmi perché? Di seguito riportiamo il codice che ho scritto,Scrittura su un file temporaneo 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

Come fai a sapere che i dati non vengono scritti su di esso? [L'argomento 2 'File # createTempFile()'] (http://docs.oracle.com/javase/7/docs/api/java/io/File.html#createTempFile%28java.lang.String,%20java .lang.String% 29) metodo non fa nulla per specificare la directory, a proposito. –

+0

@Matt: il file viene creato ma non vedo alcun dato nel file e inoltre è possibile che i file creati senza i numeri casuali vengano generati. – user1688404

+0

Sei sicuro che non ci siano errori con i tuoi contenuti di StringBuffer? Prova e scrivi un "Hello, World!" stringa al file. –

risposta

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

dovrebbe essere

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)) esiste. Poiché 'filename' nella domanda acually è un' File', questo costruttore dovrebbe funzionare con ['File.getAbsolutePath()'] (http://docs.oracle.com/javase/7/docs/api/java/io /File.html#getAbsolutePath()). –

+0

Anche FileWriter (String, append booleano) esiste quindi qualsiasi cosa detto il tichodroma sia corretto –

+0

@Joop: Grazie funziona .. ma è possibile generare nomi di file senza che vengano generati i numeri casuali – user1688404

0

tenta di chiamare bw.flush() prima di chiudere lo scrittore. Anche se penso che scrittore dovrebbe chiamare a filo automaticamente prima di essere chiuso ...

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

dovrebbe essere

FileWriter fileWriter = new FileWriter(filename, true); 

si può anche utilizzare questa nota

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

`filename.getName();` 

restituisce il file ename senza il percorso assoluto. Quindi potrebbe esserci il caso che stia creando un file nella directory di lavoro Presente e scrivendo in esso.

+0

Come questo risolve il problema? –

1

Invece di creare file nella directory temporanea, creare il file nella directory di lavoro e utilizzare objFile.deleteOnExit() .It funziona anche lo stesso come la creazione di file in directory temporanea.

+1

Perché pensi che sia un'idea migliore quella di ottenere un file temporaneo funzionante? –

+0

non è l'idea migliore, ma è un'alternativa, funzionerà. – Vijay

+1

Anche un file temporaneo "dovrebbe" funzionare. –

4

Questo funziona:

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

nota l'utilizzo di FileWriter(File, boolean) e di System.out.println(tempFile.getAbsolutePath()).