Fileクラスは不変(immutable)なクラスであり、一度生成したら状態が決して変更されることがない設計。
「FileクラスがJDK1.0の時代からある古いクラスだからか」とリンク先には書かれています。
JavaのFileクラスは不変(immutable)クラスという点に関する注意点 – 達人プログラマーを目指して
http://d.hatena.ne.jp/ryoasai/20110711/1310387741
package jp.arison; import java.io.File; import java.io.IOException; public class FileTest { /** * Fileクラスは不変(immutable)なクラスってことを確認する * * @throws IOException 例外 */ public void renameTest() throws IOException { File srcFile = new File("temp.txt"); File targetFile = new File("temp2.txt"); if (srcFile.createNewFile()) { System.out.println(srcFile.getName() + "作成しました。(ファイルシステム上に作成されてる)"); } if (srcFile.renameTo(targetFile)) { // Fileクラスのオブジェクトに対応していたファイルの名前がファイルシステム上で変更されます。 System.out.println(targetFile.getName() + "リネームしました。(ファイルシステム上で変更されてる)"); } System.out.println(""); System.out.println("ここでFileクラスのgetName()を確認"); System.out.println("srcFile.getName() :" + srcFile.getName()); System.out.println("targetFile.getName() :" + targetFile.getName()); System.out.println(""); System.out.println("srcFile.delete() で削除してみる"); if (srcFile.delete()) { System.out.println(srcFile.getName() + "消せました。(ファイルシステム上で削除されてる)"); } else { System.out.println(srcFile.getName() + "消せません。"); } System.out.println(""); System.out.println("targetFile.delete() で削除してみる"); if (targetFile.delete()) { System.out.println(targetFile.getName() + "消せました。(ファイルシステム上で削除されてる)"); } else { System.out.println(targetFile.getName() + "消せません。"); } System.out.println(""); System.out.println("なるほど、renameTo()しても、 getName()の値は変わらない"); System.out.println("Fileクラスは不変(immutable)なクラスってことで"); System.out.println("一度生成したら状態が決して変更されることがない設計ってわけか"); } }
【実行結果】
temp.txt作成しました。(ファイルシステム上に作成されてる)
temp2.txtリネームしました。(ファイルシステム上で変更されてる)
ここでFileクラスのgetName()を確認
srcFile.getName() :temp.txt
targetFile.getName() :temp2.txt
srcFile.delete() で削除してみる
temp.txt消せません。
targetFile.delete() で削除してみる
temp2.txt消せました。(ファイルシステム上で削除されてる)
なるほど、renameTo()しても、 getName()の値は変わらない
Fileクラスは不変(immutable)なクラスってことで
一度生成したら状態が決して変更されることがない設計ってわけか
Java6までの環境では必要に応じてcommons-ioなどのライブラリ
http://commons.apache.org/io/
Java7からは
http://d.hatena.ne.jp/nowokay/20110707