====== File.delete() problem in Java ====== 今、取り掛かっているプロジェクトでリソースpropertiesファイルの内容を変更するツールを開発している。\\ 主なロジックの流れは次のとおり。\\ - xxx.propertiesのコピーxxx.properties_orgを作成する。 - xxx.properties_orgのバックアップfileであるxxx.properties_org_backを作成する。((作業中、エラーが発生する場合、元の状態で戻す為に用意する。)) - xxx.properties_orgを読込み、変換したい文字列で変換して、xxx.properties_tempファイルで出力する。((読み込む際、charsetは言語に沿って決める(日本語ならShift-JIS)。)) - xxx.properties_orgファイルを削除する。 - xxx.properties_tempファイル名をxxx.properties_orgで修正する。(File.renameTo) - xxx.properties_orgファイルからnative2asciiを用いてxxx.propertiesファイルを出力する。((Runtime.getRuntime().exec("native2ascii -encoding " + charset + " " + sourceFilePath + " " + makeFilePath); \\ ここでsourceFilePathはxxx.properties_org, makeFilePathはxxx.propertiesに該当する。)) - 正常に処理が終われば、xxx.properties_orgとxxx.properties_org_backを削除する。 エラーが発生する場合、xxx.properties_orgを削除して、xxx.properteis_org_backを元にnative2asciiを利用しxxx.propertiesで変換する。 最後の処理で理解出来ないことが起こった。xxx.properties_org_backファイルは削除出来るけど、xxx.properties_orgを削除しようとした瞬間、xxx.properteisファイルも一緒に消える妙な現象だ。\\ 普通、こんなこと起こるかよ。と思いながら、真相が突き止めたくて一つの実験をすることにした。 {{keywords>File delete() native2ascii}} ===== 実験(1) ===== 実験は削除するにどのくらい掛かるのかを数えてみた。JDK1.5環境で、ログはlog4jを利用した。 String[] orgPropKey = (String[])orgPropList.keySet().toArray(new String[0]); for(int j=0; j