在java中写入临时文件

在java中写入临时文件,java,Java,我想以追加模式写入临时文件。我看到文件已创建,但Stringbuffer中的数据未写入其中。谁能告诉我为什么?请在下面找到我写的代码 public static void writeToFile(String pFilename, StringBuffer sb) throws IOException { String property = "java.io.tmpdir"; String tempDir = System.getProperty(prope

我想以追加模式写入临时文件。我看到文件已创建,但Stringbuffer中的数据未写入其中。谁能告诉我为什么?请在下面找到我写的代码

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();
}
在关闭编写器之前,尝试调用
bw.flush()
。虽然我认为作者应该在关闭前自动调用flush

FileWriter fileWriter = new FileWriter(filename.getName(), true);
FileWriter fileWriter = new FileWriter(filename.getName(), true);
应该是

FileWriter fileWriter = new FileWriter(filename, true);
FileWriter fileWriter = new FileWriter(filename, true);
你也可以用这个

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

返回不带绝对路径的文件名。因此,可能存在这样的情况:它正在当前工作目录中创建一个文件并写入其中

应该是

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

不要在临时目录中创建文件,而是在您的工作目录中创建文件,并使用
objFile.deleteOnExit()
。它的工作原理与在临时目录中创建文件的工作原理相同。

此操作:

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

注意and的用法。

您如何知道数据没有写入其中?方法对指定目录没有任何作用。@Matt:文件已创建,但我在文件中看不到任何数据,而且是否可以在不生成随机数的情况下创建文件。您确定StringBuffer内容没有错误吗?尝试在文件中写入一个“Hello,World!”字符串打印?(旁注:您是否使用StringBuffer,因为您有多个线程要处理?如果没有,请使用StringBuilder)。存在。由于问题中的
文件名
实际上是一个
文件
,因此此构造函数应该与.FileWriter(String,boolean append)一起使用,因此无论tichodroma说什么correct@Joop:谢谢,它很管用。。但是可以在不生成随机数的情况下生成文件名一个可以使用前缀@user1688404为什么这些数字会困扰您?它们的存在是为了确保独特性。正如Joop Eggen所建议的,如果对您很重要,您可以在名称中添加前缀。为什么您认为这是一个更好的主意,而不是获得一个工作临时文件?这不是一个更好的主意,但它是一个替代方案,它会起作用。@Vijay,我想在System Temp文件夹中创建此文件,然后需要向此文件附加新数据。