renameToメソッド - Fileクラス - 萌えJava超入門
Fileクラス

renameToメソッド

ファイル、又はディレクトリ名を変更します。

renameTo(File file02)

目次

1. renameToメソッド


自身の抽象パス名が示すファイル、又はディレクトリ名を、
引数のFileインスタンスの抽象パス名に変更します。
名前の変更が成功すれば true 失敗すれば false を返します。

 public boolean renameTo(File dest)
            

renameToメソッド 書式
File file;
File dest;
 boolean bool = file.renameTo(dest);

萌えJava超入門 萌えJava超入門
ところで、
Fileクラスのインスタンスって
抽象パス名を変更できないんじゃ
なかったでしたっけ?
萌えJava超入門
お~っ!
いいところ突いてる!

重要
変更されるのはインスタンスが持つ抽象パス名ではなく実際のファイル名だけです。

萌えJava超入門 萌えJava超入門
あ~。
「Fileクラスのインスタンス」と
「実際のファイル」って
同じじゃないって事っスか?!
萌えJava超入門
そうなんだ! ほら、
「インスタンスの生成=ファイルの生成ではない」
の時と同じなんだよ。


2. サンプルコード


file01.txt というファイルを作成して、
renameToメソッドで file02.txt に名前を変更しました。
各工程でファイルの有無を existseメソッドで確認しています。

萌えJava超入門
長く見えるけど
ほとんど System.out.println だ。
//Sample13_01.java

import java.io.File;
import java.io.IOException;

class Sample13_01{

    public static void main(String[] args){

        //(1)
        File file01 = new File("file01.txt");
        File file02 = new File("file02.txt");

        //(2)
        try{
            file01.createNewFile();// file01.txt 作成
        }catch(IOException e){
            e.printStackTrace();
        }

        //(3)
        System.out.println("file01.txt: " + file01.exists()); // true
        System.out.println("file02.txt: " + file02.exists()); // false

        //(4)
        System.out.println("\n** rename **");
        file01.renameTo(file02); // file01.txt → file02.txt に改名

        //(5)
        System.out.println("file01.txt: " + file01.exists()); // false
        System.out.println("file02.txt: " + file02.exists()); // true

        //(6)
        System.out.println("\n** create file01.txt **");
        try{
            file01.createNewFile();// 再び file01.txt 作成
        }catch(IOException e){
            e.printStackTrace();
        }

        //(7)
        System.out.println("file01.txt: " + file01.exists()); // true
        System.out.println("file02.txt: " + file02.exists()); // true

    }
}
\n は、改行のエスケープシーケンスです。

Sample13_01 の解説

  1. Fileクラスのインスタンスを2つ作成します。(file01file02
  2. file01は、createNewFileメソッドで、実際のファイル「file01.txt」を作成します
  3. ここで、一度、file01file02 がそれぞれ実在しているか確かめます。
  4. 「file01.txt」は存在して、「file02.txt」はありません。
  5. renameToメソッドで、「file01.txt」を「file02.txt」に改名します。
  6. もう一度、file01file02 がそれぞれ実在しているか確かめます。
  7. 「file01.txt」はなくなって、「file02.txt」がありました。
  8. file01の、createNewFileメソッドで、もう一度「file01.txt」を作成します。
  9. file01はちゃんと生きています。
  10. 「file01.txt」、「file02.txt」の両方が確認できました。

コマンドライン
>cd ws
ws>javac -encoding UTF-8 Sample13_01.java
ws>java Sample13_01
file01.txt: true
file02.txt: false

** rename **
file01.txt: false
file02.txt: true

** create file01.txt **
file01.txt: true
file02.txt: true



萌えJava超入門 萌えJava超入門 萌えJava超入門
大事なことなので
2回言いました!
重要
変更されるのはインスタンスが持つ抽象パス名ではなく実際のファイル名だけです。
変更前のインスタンス file01 の抽象パス名は、「file01.txt」のままです。




3. 移動ができます


Linuxユーザーの方にはお馴染みですが、renameToメソッドで、ファイルやディレクトリの移動ができます。
renameToメソッドは、パス名を変更するメソッドなので、
dir01/file.txt → dir02/file.txt
のようにパスを変更することで、移動ができるのです。
ただ、 dir01/file.txt と dir02ディレクトリがある事が前提です。


萌えJava超入門
ねえ、
「file.txt」を作るところを
プログラムで書いちゃったら
移動してることを確認できなくない?
萌えJava超入門
//Sample13_02.java

import java.io.File;
import java.io.IOException;

class Sample13_02{
    public static void main(String[] args){

      File dir01 = new File("dir01");
      File dir02 = new File("dir02");
      File file01 = new File("dir01/file.txt");
      File file02 = new File("dir02/file.txt");

      dir01.mkdir();
      dir02.mkdir();
      try{
          file01.createNewFile();
      }catch(IOException e){
          e.printStackTrace();
      }

      file01.renameTo(file02);
      System.out.println("dir02/file.txt: " + file02.exists());
    }
}

萌えJava超入門
えーと。
各自でいろいろ
試してみて下さい。
コマンドライン
>cd ws
ws>javac Sample13_02.java
ws>java Sample13_02
dir02/file.txt: true

ws>

萌えJava超入門 萌えJava超入門
締まらないわね。



お疲れ様でした。




© 2019 awasekagami