2012-11-06 3 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引数 'File#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のコンテンツにエラーはありませんか? "Hello、World!"を試してみてください。文字列をファイルに追加します。 –

答えて

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

作業ディレクトリにファイルを作成し、objFile.deleteOnExit() .ITを使用し、代わりに、一時ディレクトリにファイルを作成する

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))が存在します。質問の 'filename'は実際に' File'なので、このコンストラクタは['File.getAbsolutePath()'](http://docs.oracle.com/javase/7/docs/api/java/io)で動作するはずです。 /File.html#getAbsolutePath())。 –

+0

また、FileWriter(String、boolean append)は存在するので、tydodromaは正しいと言います。 –

+0

@Joop:ありがとうございます。しかし、生成される乱数なしでファイル名を生成することは可能です。 – user1688404

0

はライターを閉じる前にbw.flush()を呼び出すようにしてください、私が書いたコードの下に見つけてください。私はその作家が閉鎖される前に自動的にフラッシュを呼び出すべきだと思いますが...

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

はあなたにもこの

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

ノート

`filename.getName();` 
を使用することができます

FileWriter fileWriter = new FileWriter(filename, true); 

する必要があります

はfilを返します絶対パスなしでename。したがって、現在の作業ディレクトリにファイルを作成し、そこに書き込む場合があります。

+0

これはどのようにして問題を解決しますか? –

1

する必要がありますまた、一時ディレクトリにファイルを作成するのと同じように動作します。

+1

なぜ、これは作業中の一時ファイルを取得するのが良いアイデアだと思いますか? –

+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())の使用を注意してください。

関連する問題