はじめに
ここ数日、コンビニ交付のシステムトラブルが世間をにぎわせています。
この記事にある川崎市のシステムを開発したベンダーからプレスリリースがでており、その内容から「一時ファイルの不適切な取扱いが原因ではないか」とSNS上ではうわさされています。
本当に一時ファイルの取り扱いが悪かったのかについては関係者しかわからないのですが、そういうSNSのやりとりを見ていて、Javaには一時ファイルを安全に作成する方法が標準で用意されていることを思い出したので、まとめておこうと思った次第です(強引)
Java6以前
Java6以前の場合はFileクラスのcreateTempFileメソッドを利用します。
- File.createTempFile(String prefix, String suffix)
- File.createTempFile(String prefix, String suffix, File directory)
またFileクラスの deleteOnExitメソッドを利用すると、JVMの終了時に作成した一時ファイルを削除することができます。
Java7以降
Java7以降の場合はFilesクラスのcreateTempFileメソッドを利用するとよいです。
- Files.createTempFile(Path dir, String prefix, String suffix, FileAttribute>... attrs)
- Files.createTempFile(String prefix, String suffix, FileAttribute>... attrs)
Files.newBufferedWriterやFiles.newOutputStreamなどを使ってこの一時ファイルをオープンする際、OpenOptionとしてStndardOpenOption.DELETE_ON_CLOSEを指定すると、ファイルをクローズする際にファイルを削除することができます。
またFilesクラスにはcreateTempDirectoryというメソッドも用意されています。これを利用すると、安全に一時ディレクトリを作成することができます。