2012-11-06 34 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())使用。