Java - ファイルの移動、ファイル名の変更(rename、move)

Javaでは、さまざまな方法でファイルの名前を変更または移動できます。 移動するのはファイル名を変更するのと同じ意味なので、 rename と move は同じ意味であると考えることができます。

1. Files.move() でファイル名を変更します。

Java7が提供するFilesとPathクラスを使用してファイルを移動できます。

File.move(A, B) は引数に渡された A のパスを B に変更します。 Aが存在しない、またはBのパスにすでにファイルがあるなどの理由で移動が失敗する可能性があり、Exceptionが発生する可能性があります。

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;

public class Example {

    public static void main(String args[]) {
        try {
            Path filePath = Paths.get("/tmp/example.txt");
            Path filePathToMove = Paths.get("/tmp/my_example.txt");
            Files.move(filePath, filePathToMove);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

2. File.renameTo() でファイル名を変更します。

File.renameTo() は、ファイルを引数として渡されたファイルのパスに変更します。 (名前を変更します) renameが成功した場合はtrueを返し、失敗した場合はfalseを返します。ファイルが存在しないなどの理由で、名前変更が失敗する可能性があります。

import java.io.File;

public class Example {

    public static void main(String args[]) {
        File file = new File("/tmp/example.txt");
        File fileToMove = new File("/tmp/my_example.txt");

        boolean success = file.renameTo(fileToMove);
        if (!success) {
            System.out.println("Failed to rename to " + fileToMove);
        }
    }
}

3. Commonsライブラリへのファイル名の変更、

Mavenプロジェクトの場合は、次のようにcommons-ioライブラリを追加できます。

<dependency>
    <groupId>commons-io</groupId>
    <artifactId>commons-io</artifactId>
    <version>2.6</version>
</dependency>

他のビルドシステムを使用するプロジェクトは、mvnrepository.comを参照して設定してください。

Commonsライブラリの FileUtils.moveDirectory(A, B)は、ディレクトリAのパスをBに変更します。

try {
    File file = FileUtils.getFile("/home/js/test/myfile");
    File fileToMove = FileUtils.getFile("/home/js/test/myfile_renamed");
    FileUtils.moveDirectory(file, fileToMove);
} catch (IOException e) {
    e.printStackTrace();
}

フォルダ以外のファイルの名前や場所を変更するには、次のように FileUtils.moveFile() を使用します。

try {
    File file = FileUtils.getFile("/home/js/test/text.txt");
    File fileToMove = FileUtils.getFile("/home/js/test/new_folder/renamed_text.txt");
    FileUtils.moveFile(file, fileToMove);
} catch (IOException e) {
    e.printStackTrace();
}

moveFile() は引数に渡されるパスにファイルを移動します。移動するパスに作成されていないディレクトリがある場合は、そのフォルダを自動的に作成します。 上記の例では、/home/js/test/new_folderフォルダが存在しないときにこのフォルダを作成してファイルを移動します。

存在しないフォルダを作成したくない場合は、次のように moveFileToDirectory(src, des, createDestDir) を使用します。 最後の引数createDestDirにfalseを渡すと、存在しないフォルダは作成されません。逆に true を渡すとフォルダが作成されます。

try {
    File file = FileUtils.getFile("/home/js/test/text.txt");
    File fileToMove = FileUtils.getFile("/home/js/test/new_folder/text.txt");
    FileUtils.moveFileToDirectory(file, fileToMove, false);
} catch (IOException e) {
    e.printStackTrace();
}

フォルダが存在しない場合、ファイルは移動されず、次の例外がスローされます。

java.io.FileNotFoundException: Destination directory '/home/js/test/new_folder/text.txt' does not exist [createDestDir=false]
at org.apache.commons.io.FileUtils.moveFileToDirectory(FileUtils.java:3042)
at example.io.RenameOrMove.main(RenameOrMove.java:46)

Related Posts

codechachaCopyright ©2019 codechacha