【Java】renameToを使ってファイル/ディレクトリを移動する!

ファイル/ディレクトリを移動するにはFileクラスのrenameToメソッドを使用します。

Fileクラスとは、Javaを使ってローカルディスクに対して、ファイルの作成や削除やコピーの変更など、ファイルを操作することができるクラスであり、
そのクラスにあるrenameToメソッドとは、対象のファイル(またはディレクトリ)の名前を変更するメソッドになります。

今回はFileクラスのrenameToメソッドを使って以下の場合でファイル/ディレクトリを移動していきます。

⚫︎ 移動元のファイル/ディレクトリと移動先のディレクトリが存在する場合
⚫︎ 移動先のファイル/ディレクトリがすでに存在する場合
⚫︎ 移動元のファイル/ディレクトリが存在しない場合

また、Java7から使用できるようになったFilesクラスのmoveメソッドを使って、ファイル/ディレクトリを移動する方法についても紹介していきます。

Fileクラスとは

Fileクラスとは、ローカルディスクに対して、ファイルの作成や削除やコピーの変更など、ファイルを操作することができるクラスとなります。

Fileクラスの書き方

Fileクラスの構文は下記となります。

FileクラスをインポートすることでFileクラスで準備されているメソッドを使用できるようになります。

また、ファイルパスを引数としてFileクラスをインスタンス化することで指定したファイルに対して操作を行うことができます。

renameToメソッドとは

FileクラスのrenameToメソッドとは、対象のファイル(またはディレクトリ)の名前を変更するメソッドになります。

renameToメソッドの書き方

FileクラスのrenameToメソッドの構文は下記となります。

renameToのにパラメータとして変更後のファイル名を指定することで変更前のファイル名を変更後のファイルの名へと変更します。

また、返り値として変更できた場合はtrueを返し、変更できなかった場合はfalseを返します。

ファイル/ディレクトリを移動するサンプルコード

ファイル/ディレクトリを移動するサンプルコードを紹介します。

移動元のファイル/ディレクトリと移動先のディレクトリが存在する場合

コンソールから実行する場合は、カレントディレクトリに「before」ディレクトと「after」ディレクトリを用意し、「before」ディレクトリ内に「beforeFile.txt」を用意します。

Eclipseで実行する場合はプロジェエクト直下に「before」ディレクトと「after」ディレクトリを用意し、「before」ディレクトリ内に「beforeFile.txt」を用意します。

その状態でMain.javaを実行します。

Main.java

出力結果

移動成功

renameToメソッドによって「before」ディレクトリ内の「beforeFile.txt」が「afterFile.txt」にリネームされて「after」ディレクトリ内に移動されます。

また、コンソールには「接続成功」と表示されます。

移動先のファイル/ディレクトリがすでに存在する場合

コンソールから実行する場合は、カレントディレクトリに「before」ディレクトと「after」ディレクトリを用意し、「before」ディレクトリ内に「beforeFile.txt」を用意し、「after」ディレクトリ内に「afterFile.txt」を用意します。

Eclipseで実行する場合はプロジェエクト直下に「before」ディレクトと「after」ディレクトリを用意し、「before」ディレクトリ内に「beforeFile.txt」を用意し、「after」ディレクトリ内に「afterFile.txt」を用意します。

その状態でMain.javaを実行します。

Main.java

出力結果

移動失敗

移動先のディレクトリには既に同じファイルが存在しているため、移動できないことからrenameToメソッドはfalseを返します。

また、コンソールには「接続失敗」と表示されます。

しかし、Unix系の環境では上書きで移動されてrenameToメソッドはtrueを返します。

移動元のファイル/ディレクトリが存在しない場合

コンソールから実行する場合は、カレントディレクトリに「after」ディレクトリを用意します。

Eclipseで実行する場合はプロジェエクト直下に「after」ディレクトリを用意します。

その状態でMain.javaを実行します。

Main.java

出力結果

移動失敗

移動元のファイルやディレクトリが存在しないため、移動できないことからrenameToメソッドはfalseを返します。

また、コンソールには「接続失敗」と表示されます。

NIO.2(Filesクラス)でファイル/ディレクトリを移動する場合

NIO.2(Filesクラス)でファイル/ディレクトリを移動するにはFilesクラスのmoveメソッドを使用します。

NIO.2とはJava7で導入された「java.nio.file」パッケージとそのサブパッケージとを合わせたものであり、NIO.2のFilesクラスを使用することでとても簡単にファイル処理を行うことができます。

そのため、Filesクラスのmoveメソッドを呼び出すことによって、ファイル、または、ディレクトリを移動することができます。

具体的なサンプルコードを見てみます。

コンソールから実行する場合は、カレントディレクトリに「before」ディレクトリと「after」ディレクトリを用意し、「before」ディレクトリ内に「beforeFile.txt」を用意します。

また、Eclipseで実行する場合は、プロジェクト直下に「before」ディレクトリと「after」ディレクトリを用意し、「before」 ディレクトリ内に「beforeFile.txt」を用意します。

その状態でMain.javaを実行します。

Main.java

出力結果

移動前の存在確認:false
移動後の存在確認:true

moveメソッドによって「before」ディレクトリ内の「beforeFile.txt」が「afterFile.txt」にリネームされて「after」ディレクトリ内に移動されます。

また、コンソールには出力結果の内容が表示されます。

今回のポイント

renameToでファイル/ディレクトリを移動

ファイル/ディレクトリを移動するにはFileクラスのrenameToメソッドを使用する。

⚫︎ FileクラスのrenameToメソッドでファイル、または、ディレクトリを移動することができる

⚫︎ renameToメソッドのパラメータは移動後のFileインスタンスを指定する

⚫︎ 正常に移動された場合、renameToメソッドは「true」を返し、正常に移動されなかった場合、「false」を返す

⚫︎ renameToメソッドでファイル、または、ディレクトリが保存されているディレクトリに対して書き込み権限を持っていない場合は、例外が発生する

⚫︎ 移動先に同名のファイル、または、ディレクトリがすでに存在する場合、Unix系の環境では上書きで移動されて「true」を返すが、Windows系の環境では移動されずに「false」を返す

⚫︎ NIO.2(Filesクラス)でファイル/ディレクトリを移動する場合はmoveメソッドを使用する

関連記事

ファイル/ディレクトリの名前を変更する方法ついてはこちらをご参考ください。

ファイルにコピーする方法についてはこちらをご参考ください。

指定したパスが存在するか判断する方法についてはこちらをご参考ください。

Writer
壷井

壷井

株式会社flyhawkの壷井です。フライテックメディア事業部でのメディア運営・ライター業務なども担当。愛機はMac Book AirとThinkPad。好きな言語:swift、JS系(Node.js等)。好きなサーバー:AWS。受託開発やプログラミングスクールの運営をしております。ご気軽にお問い合わせください。

最新の案件情報

フリーランスエンジニアの案件探し