2012-11-06 31 views
6

我想寫在追加模式下的臨時文件。我看到該文件已創建,但來自Stringbuffer的數據沒有寫入。有人可以告訴我爲什麼嗎?請在下面找到我寫的代碼,寫入到一個臨時文件在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

你怎麼知道的數據是沒有得到書面呢? [2-參數'文件#createTempFile()'](http://docs.oracle.com/javase/7/docs/api/java/io/File.html#createTempFile%28java.lang.String,%20java .lang.String%29)方法不會指定目錄,順便說一下。 –

+0

@Matt:文件已創建,但我沒有看到文件中的任何數據,也有可能創建的文件沒有生成隨機數字。 – user1688404

+0

您確定您的StringBuffer內容沒有錯誤嗎?試着寫一個「你好,世界!」字符串到文件。 –

回答

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

應該

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

['的FileWriter(字符串)'](http://docs.oracle.com/javase/7/docs/api/java/io/FileWriter.html#FileWriter(java.lang.String中))是否存在。由於問題中的'filename'實際上是一個'File',所以這個構造函數應該使用['File.getAbsolutePath()'](http://docs.oracle.com/javase/7/docs/api/java/io /File.html#getAbsolutePath())。 – 2012-11-06 12:30:45

+0

同樣的FileWriter(字符串,布爾追加)存在,因此無論tichodroma說的是正確 –

+0

@Joop:由於它的工作原理..但可以將生成的文件名,而不產生 – user1688404

0

嘗試在關閉作者之前調用bw.flush()。雖然我認爲作家應該在關閉之前自動調用flush ...

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

應該

FileWriter fileWriter = new FileWriter(filename, true); 

,你也可以使用這個

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

`filename.getName();` 

返回fil沒有絕對路徑而羨慕。所以可能會出現這種情況,它正在當前工作目錄中創建一個文件並寫入它。

+0

這是如何解決問題的? – 2012-11-06 12:27:04

1

而不用在臨時目錄中的文件,在您的工作目錄下創建文件,並使用objFile.deleteOnExit()。它還將努力與在臨時目錄創建文件。

+1

爲什麼你認爲這是一個更好的主意,得到一個工作的臨時文件? – 2012-11-06 12:33:58

+0

這不是更好的主意,但它是一種替代方法,它會起作用。 – Vijay

+1

臨時文件「應該」也可以使用。 –

4

這工作:

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

FileWriter(File, boolean)System.out.println(tempFile.getAbsolutePath())使用。