続:Java NIO2 で一時ファイルを作成、処理後に削除

  public void doSomething() {
    try {
      Path tempFilePath = Files.createTempFile("id", ".tmp");
      try (Writer writer = Files.newBufferedWriter(tempFilePath)) {
        // do something.
        // 終わった後に一時ファイルを削除したい
      }
    } catch (IOException e) {
      // ログとか出したり、または、別の例外再スロー
    }
  }

前回書いた Files.newBufferedWriter(tempFilePath, StandardOpenOption.DELETE_ON_CLOSE) って、OSや権限で効かない場合もある、って知りました。 って言うか、自分で地雷を踏んでしまったんですけどね。

で、簡易的な解決だと、以下のようにしたら良いと思います。

  public void doSomething() {
    try {
      Path tempFilePath = Files.createTempFile("id", ".tmp");
      try (Closeable closeable = () -> Files.deleteIfExists(tempFilePath);
        Writer writer = Files.newBufferedWriter(tempFilePath)) {
        // do something.
      }
    } catch (IOException e) {
      // ログとか出したり、または、別の例外再スロー
    }
  }

Closeable の匿名クラスを作って、try-with-resources 構文の中で、一時ファイルを削除する、と言う処理ですね。 Java 17 で書きましたが、 Java SE 8 でも動くと思います。