【Java】renameToを使ってファイル/ディレクトリを移動する!
ファイル/ディレクトリを移動するにはFileクラスのrenameToメソッドを使用します。
Fileクラスとは、Javaを使ってローカルディスクに対して、ファイルの作成や削除やコピーの変更など、ファイルを操作することができるクラスであり、
そのクラスにあるrenameToメソッドとは、対象のファイル(またはディレクトリ)の名前を変更するメソッドになります。
今回はFileクラスのrenameToメソッドを使って以下の場合でファイル/ディレクトリを移動していきます。
⚫︎ 移動元のファイル/ディレクトリと移動先のディレクトリが存在する場合
⚫︎ 移動先のファイル/ディレクトリがすでに存在する場合
⚫︎ 移動元のファイル/ディレクトリが存在しない場合
また、Java7から使用できるようになったFilesクラスのmoveメソッドを使って、ファイル/ディレクトリを移動する方法についても紹介していきます。
目次
Fileクラスとは
Fileクラスとは、ローカルディスクに対して、ファイルの作成や削除やコピーの変更など、ファイルを操作することができるクラスとなります。
Fileクラスの書き方
Fileクラスの構文は下記となります。
1 2 3 |
import java.io.File; File オブジェクト名 = new File("ファイルパス"); |
FileクラスをインポートすることでFileクラスで準備されているメソッドを使用できるようになります。
また、ファイルパスを引数としてFileクラスをインスタンス化することで指定したファイルに対して操作を行うことができます。
renameToメソッドとは
FileクラスのrenameToメソッドとは、対象のファイル(またはディレクトリ)の名前を変更するメソッドになります。
renameToメソッドの書き方
FileクラスのrenameToメソッドの構文は下記となります。
1 |
移動前のファイル名.renameTo(移動後のファイル名) |
renameToのにパラメータとして変更後のファイル名を指定することで変更前のファイル名を変更後のファイルの名へと変更します。
また、返り値として変更できた場合はtrueを返し、変更できなかった場合はfalseを返します。
ファイル/ディレクトリを移動するサンプルコード
ファイル/ディレクトリを移動するサンプルコードを紹介します。
移動元のファイル/ディレクトリと移動先のディレクトリが存在する場合
コンソールから実行する場合は、カレントディレクトリに「before」ディレクトと「after」ディレクトリを用意し、「before」ディレクトリ内に「beforeFile.txt」を用意します。
Eclipseで実行する場合はプロジェエクト直下に「before」ディレクトと「after」ディレクトリを用意し、「before」ディレクトリ内に「beforeFile.txt」を用意します。
その状態でMain.javaを実行します。
Main.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
// ファイル・ディレクトリを移動する import java.io.File; public class Main { public static void main(String[] args) throws Exception { // 移動前のファイル・ディレクトリ File beforeFile = new File("before", "beforeFile.txt"); //移動後のファイル・ディレクトリ File afterFile = new File("after", "afterFile.txt"); // ファイル・ディレクトリを移動する if (beforeFile.renameTo(afterFile)) { // 正常に移動された場合 System.out.println("移動成功"); } else { // 正常に移動されない場合 System.out.println("移動失敗"); } } } |
出力結果
移動成功
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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
// ファイル・ディレクトリを移動する import java.io.File; public class Main { public static void main(String[] args) throws Exception { // 移動前のファイル・ディレクトリ File beforeFile = new File("before", "beforeFile.txt"); //移動後のファイル・ディレクトリ File afterFile = new File("after", "afterFile.txt"); // ファイル・ディレクトリを移動する if (beforeFile.renameTo(afterFile)) { // 正常に移動された場合 System.out.println("移動成功"); } else { // 正常に移動されない場合 System.out.println("移動失敗"); } } } |
出力結果
移動失敗
移動先のディレクトリには既に同じファイルが存在しているため、移動できないことからrenameToメソッドはfalseを返します。
また、コンソールには「接続失敗」と表示されます。
しかし、Unix系の環境では上書きで移動されてrenameToメソッドはtrueを返します。
移動元のファイル/ディレクトリが存在しない場合
コンソールから実行する場合は、カレントディレクトリに「after」ディレクトリを用意します。
Eclipseで実行する場合はプロジェエクト直下に「after」ディレクトリを用意します。
その状態でMain.javaを実行します。
Main.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
// ファイル・ディレクトリを移動する import java.io.File; public class Main { public static void main(String[] args) throws Exception { // 移動前のファイル・ディレクトリ File beforeFile = new File("before", "beforeFile.txt"); //移動後のファイル・ディレクトリ File afterFile = new File("after", "afterFile.txt"); // ファイル・ディレクトリを移動する if (beforeFile.renameTo(afterFile)) { // 正常に移動された場合 System.out.println("移動成功"); } else { // 正常に移動されない場合 System.out.println("移動失敗"); } } } |
出力結果
移動失敗
移動元のファイルやディレクトリが存在しないため、移動できないことから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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
// ファイル・ディレクトリを移動する import java.io.File; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.nio.file. StandardCopyOption; public class Main { public static void main(String[] args) throws Exception { // 移動元のファイル・ディレクトリ File beforeFile = new File("before", "beforeFile.txt"); Path beforePath = Paths.get(beforeFile.toString()); // 移動先のファイル・ディレクトリ File afterFile = new File("after", "afterFile.txt"); Path afterPath = Paths.get(afterFile.toString()); // 移動前のファイル・ディレクトリの存在確認結果を表示する System.out.println( "移動前の存在確認:" + Files.exists(afterPath)); //上書きオプションを指定してファイル・ディレクトリを移動する Files.move( beforePath, afterPath, StandardCopyOption.REPLACE_EXISTING); // 移動先のファイル・ディレクトリの存在確認結果を表示する System.out.println( "移動後の存在確認:" + Files.exists(afterPath)); } } |
出力結果
移動前の存在確認: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メソッドを使用する
関連記事
ファイル/ディレクトリの名前を変更する方法ついてはこちらをご参考ください。
ファイルにコピーする方法についてはこちらをご参考ください。
指定したパスが存在するか判断する方法についてはこちらをご参考ください。
ST
株式会社flyhawkのSTです。フライテックメディア事業部でのメディア運営・ライター業務なども担当。愛機はMac Book AirとThinkPad。好きな言語:swift、JS系(Node.js等)。好きなサーバー:AWS。受託開発やプログラミングスクールの運営をしております。ご気軽にお問い合わせください。