deleteOnExit()メソッドは環境によって動作が違う JVM+Windows
Java Virtual Machine(JVM)は環境に依存せず、同じコードがどの環境でも同じように動作する設計となっています。
しかし環境依存のコードが使用されているところでは、振る舞いが異なることがあります。
deleteOnExit()メソッドはそれに該当します。
『ファイルが存在したら削除する』というメソッドです。
deleteOnExit()メソッド自体は本来JVMを終了させるときに、不要なファイルを削除するために用意されたものです。
しかし、このメソッドを使ってファイルを削除するように指定してもWindowsでは削除されないことがあります。
スポンサーリンク
原因はJavaの2つのバグによるもので、
バグ番号4171239「java.io.File.deleteOnExitは、オープン状態のファイルに対しては動作しません(win32)」
JVMデザインとWin32オペレーティングシステムの組み合わせでは、オープン状態のファイルを終了時に削除することができません。
そこで終了前にすべてのファイルを閉じておけば削除されるかというとそうではありません。
バグ番号4950148「ClassLoaderの使用にあたっては、明示的な廃棄処理を設ける必要があります」
URLClassLoader(JARファイルからクラスをロードする際に使用するクラス)は、JVMのライフタイム中はJARファイルへのストリームをオープンし続けます。
これによりJVMとWindowsの組み合わせではdeleteOnExit()メソッドでファイルが削除されないことになります。
関連記事
- SELECTタグで色を選択する場合のサンプル
- 文字列の置き換えを行う方法 (replaceAllで気をつけること)
- 文字列の部分一致検索を行う方法
- Java メモリー使用量を取得する方法
- 実行中のメソッド名やクラス名を取得する方法
- Singletonパターンを使ってクラスのインスタンスを1つにする(共有クラスのリソースを削減する方法)
- [暗号化]ブロック暗号とは(AES/DES/Blowfish PKCS5Padding ECB/CBC IV)
- ==とequalsメソッドの違い 値が同じかどうかを見るにはequalsメソッドを使う
- Exception in thread "main" java.lang.NoClassDefFoundError: HelloWorld
- javaコマンドは実行できるが、javacコマンドが実行できないとき
- Javaをコマンドラインから実行する
- JD-Eclipse 自動で逆コンパイルをすることができるプラグイン
- Java標準以外のライブラリ(パッケージ)を読み込む方法 jarファイルを追加する
- switch文とif文の違い
- NetBeans6のインストール(JavaだけでなくRuby、PHP、C/C++に対応した統合開発環境)
- Java JDK6のインストール
- 変数のデータ型
- Eclipseで逆コンパイルを行う JadClipse
- scarab [バグ追跡システム]
- JTrac [バグ追跡システム]
- Androidアプリ
- Mobile Network Code(MNC)の一覧[M-N]
- タイトルバーやステータスバーを非表示にする方法
- assetsフォルダのファイルを扱う方法 AssetManager
- MediaPlayer のメソッド一覧
- 画像を拡大縮小する方法
- Androidアプリの開発環境を作る方法
- 処理中を表すプログレスダイアログを表示する
- iPhoneアプリやAndroidアプリを簡単に作成する方法 ハイブリッドアプリケーション
- Colorクラスでの色指定
- SDカードに保存したファイルをギャラリーなどに反映させる方法
スポンサーリンク







