【Java】renameToを使ってファイル/ディレクトリの名前を変更する!
ファイル/ディレクトリの名前を変更するにはFileクラスのrenameToメソッドを使用します。
FileクラスのrenameToメソッドは、対象のファイル(またはディレクトリ)の名前を変更するメソッドとなります。
また、renameToメソッドは戻り値として変更できた場合はtrue、変更できなかった場合はfalseを返すため、ファイル名の変更ができたかどうかをログに残すことができます。
今回はFileクラスのrenameToメソッドを使って以下の場合でファイル/ディレクトリの名前を変していきます。
⚫︎ ファイル/ディレクトリの名前を変更する場合
⚫︎ 変更するファイル/ディレクトリが既に存在する場合
⚫︎ 指定したファイル/ディレクトリが存在しない場合
また、Java7から使用できるようになったFileクラスのmoveメソッドを使って、ファイル/ディレクトリの名前を変更する方法についても紹介していきます。
目次
renameToメソッドとは
FileクラスのrenameToメソッドとは、対象のファイル(またはディレクトリ)の名前を変更するメソッドになります。
renameToメソッドの書き方
FileクラスのrenameToメソッドの構文は下記となります。
1 2 3 |
import java.io.File; 変更前のファイル名.renameTo(変更後のファイル名) |
まず、renameToメソッドが使用できるようにFileクラスをインポートします。
そして、renameToの()にパラメータとして変更後のファイル名を指定することで変更前のファイル名をを変更後のファイルの名へと変更します。
また、返り値として変更できた場合はtrueを返し、変更できなかった場合はfalseを返します。
ファイル/ディレクトリの名前を変更するサンプルコード
ファイル/ディレクトリの名前を変更するサンプルコードを紹介します。
ファイル/ディレクトリの名前を変更する場合
コンソールから実行する場合、カレントディレクトリに「oldFile.txt」を用意します。
また、Eclipseで実行する場合、プロジェクト直下に「oldFile.txt」を用意します。
例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
// ファイル・ディレクトリの名前を変更する import java.io.File; public class Main { public static void main(String[] args) throws Exception { // 名前変更前のファイル・ディレクトリ File oldNameFile = new File("oldNameFile.txt"); //名前変更後のファイル・ディレクトリ File newNameFile = new File("newNameFile.txt"); // ファイル・ディレクトリの名前変更する if (oldFile.renameTo(newNameFile)) { //正常に名前が変更された場合 System.out.println("名前変更成功"); } else { // 正常に名前が変更されない場合 System.out.println("名前変更失敗"); } } } |
出力結果
名前変更成功
renameToメソッドによって「oldNameFile.txt」のファイル名が「newNameFile.txt」に変更されます。
また、コンソールには、「名前変更成功」と表示されます。
変更するファイル/ディレクトリが既に存在する場合
コンソールから実行する場合、カレントディレクトリに「newFile.txt」を用意します。
また、Eclipseで実行する場合、プロジェクト直下に「newFile.txt」を用意します。
例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
// ファイル・ディレクトリの名前を変更する import java.io.File; public class Main { public static void main(String[] args) throws Exception { // 名前変更前のファイル・ディレクトリ File oldNameFile = new File("newNameFile.txt"); //名前変更後のファイル・ディレクトリ File newNameFile = new File("newNameFile.txt"); // ファイル・ディレクトリの名前変更する if (oldFile.renameTo(newNameFile)) { //正常に名前が変更された場合 System.out.println("名前変更成功"); } else { // 正常に名前が変更されない場合 System.out.println("名前変更失敗"); } } } |
出力結果
名前変更失敗
windiws系の場合では名前の変更が行われず、falseを返します。
しかし、Unix系の環境では上書きで名前が変更されてtrueを返すようになります。
指定したファイル/ディレクトリが存在しない場合
例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
// ファイル・ディレクトリの名前を変更する import java.io.File; public class Main { public static void main(String[] args) throws Exception { // 名前変更前のファイル・ディレクトリ File oldNameFile = new File("oldNameFile.txt"); //名前変更後のファイル・ディレクトリ File newNameFile = new File("newNameFile.txt"); // ファイル・ディレクトリの名前変更する if (oldFile.renameTo(newNameFile)) { //正常に名前が変更された場合 System.out.println("名前変更成功"); } else { // 正常に名前が変更されない場合 System.out.println("名前変更失敗"); } } } |
出力結果
名前変更失敗
指定したファイルやディレクトリが存在しない場合はfalseを返します。
NIO.2(Filesクラス)でファイル/ディレクトリの名前を変更する場合
NIO.2とはJava7で導入された「java.nio.file」パッケージとそのサブパッケージとを合わせたものであり、NIO.2のFilesクラスを使用することでとても簡単にファイル処理を行うことができます。
そのため、Filesクラスのmoveメソッドを呼び出すことによって、ファイル、または、ディレクトリの名前を変更することができます。
Filesクラスのmoveメソッドのパラメータとして、次のオプションを指定することができます。
オプション | 説明 |
---|---|
StandardCopyOption.REPLACE_EXISTING | 移動先にすでにファイルが存在する 場合に上書きする。 |
StandardCopyOption.ATOMIC_MOVE |
アトミックオペレーションとして移動する。 このパラメータオプションを指定すると、他のパラメータオプションはすべて無視される。 また、別ドライブヘアトミックな移動を行った場合は例外が発生する(アトミックの場合はコピーを行う必要がある) |
Unix系の環境で名前変更後のファイル、または、ディレクトリがすでにFileクラスのrenameToメソッドでは例外は発生しませんが、Filesクラスのmoveメソッドではパラメータオプションである「StandardCopyOption.REPLACE_EXISTING」と例外が発生します。
Main.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
// ファイル・ディレクトリの名前を変更する import java.nio.file.FileSystems; import java.nio.file.Files; import java.nio.file.Path; public class Main { public static void main(String[] args) throws Exception { // 名前変更前のファイル・ディレクトリ Path oldPath = FileSystems.getDefault().getPath( "oldNameFile.txt"); // ファイル・ディレクトリの名前変更 Path newPath = Files.move( oldPath, oldPath.resolveSibling("newNameFile.txt")); // 変更後の名前を表示 System.out.println(newPath.toString()); } } |
出力結果
newFile.txt
コンソールから実行する場合は、カレントディレクトリに「oldNameFile.txt」を用意します。
ttle Eclipseで実行する場合は、プロジェクト直下に「oldNameFile.txt」を用意します。
その状態でMain.javaを実行すると、「oldFile.txt」のファイル名が「newNameFile.txt」に変更されます。
また、コンソールに、変更後のファイル名(newNameFile.txt)が表示されます。
今回のポイント
renameToでファイル/ディレクトリの名前を変更
ファイル/ディレクトリの名前を変更するにはFileクラスのrenameToメソッドを使用する。
⚫︎ FileクラスのrenameToメソッドを呼び出すことによって、ファイル、または、ディレクトリの名前を変更する
⚫︎ renameToメソッドのパラメータは変更後のファイル名を持つ「File」インスタンスを指定する
⚫︎ renameToメソッドで正常に名前が変更された場合には「true」を返し、正常に名前が変更されなかった場合には「false」を返す
⚫︎ 名前変更後のファイル、または、ディレクトリがすでに存在する場合、Windows系の環境では名前の変更が行われず、「false」を返すが、Unix系の環境では上書きで名前が変更されて「true」が返す
⚫︎ renameToメソッドで指定したファイルが存在しない場合には「false」を返す
⚫︎ ファイル、または、ディレクトリの名前を変更できない場合は、例外が発生する
moveでファイル/ディレクトリの名前を変更
⚫︎ Filesクラスのmoveメソッドでファイル、または、ディレクトリの名前を変更することができる
⚫︎ moveメソッドは複数のオプションをパラメータに指定できる
ST
株式会社flyhawkのSTです。フライテックメディア事業部でのメディア運営・ライター業務なども担当。愛機はMac Book AirとThinkPad。好きな言語:swift、JS系(Node.js等)。好きなサーバー:AWS。受託開発やプログラミングスクールの運営をしております。ご気軽にお問い合わせください。