Java - ファイル名の変更またはファイルの移動

Java –ファイルの名前変更または移動

1. 概要

このクイックチュートリアルでは、renaming / moving a File in Javaについて説明します。最初にJDK 6を使用し、次にJDK 7とNIO、Google Guava、最後にApache CommonsIOライブラリを使用します。

この記事は、例としてここのthe “Java – Back to Basic” seriesの一部です。

参考文献:

Javaでファイルをコピーする方法

Javaでファイルをコピーする一般的な方法をご覧ください。

Java NIO2 File APIの概要

Java NIO2 File APIの迅速で実用的なガイド

Javaのファイルサイズ

Javaでファイルのサイズを取得する方法の例。

2. JDK6を使用

単純なJava、JDK6ソリューションから始めましょう。

@Test
public void givenUsingJDK6_whenMovingFile_thenCorrect() throws IOException {
    File fileToMove = new File("src/test/resources/toMoveFile_jdk6.txt");
    boolean isMoved = fileToMove.renameTo(new File("src/test/resources/movedFile_jdk6.txt"));
    if (!isMoved) {
        throw new FileSystemException("src/test/resources/movedFile_jdk6.txt");
    }
}

この例では、移動するファイルとターゲットディレクトリが存在します。

renameTo()は、セキュリティマネージャが送信元または宛先への書き込みアクセスを拒否した場合はSecurityException、パラメータターゲットがnullの場合はNullPointerExceptionの2種類の例外のみをスローすることに注意してください。 。 ターゲットがファイルシステムに存在しない場合(no exception will be thrown)、メソッドの返された成功フラグを確認する必要があります。

3. JDK7を使用

NIOとJDK 7を使用して同じことを行う方法を見てみましょう。

@Test
public void givenUsingJDK7Nio2_whenMovingFile_thenCorrect() throws IOException {
    Path fileToMovePath =
      Files.createFile(Paths.get("src/test/resources/" + randomAlphabetic(5) + ".txt"));
    Path targetPath = Paths.get("src/main/resources/");

    Files.move(fileToMovePath, targetPath.resolve(fileToMovePath.getFileName()));
}

JDK7では、NIOパッケージが大幅に更新され、Pathが追加されました。これにより、ファイルシステムアーティファクトを便利に操作するためのメソッドが提供されます。

前の例と同様に、ファイルとターゲットディレクトリの両方が存在する必要があることに注意してください。

4. グアバと

次へ–Guavaソリューションを見てみましょう。

@Test
public void givenUsingGuava_whenMovingFile_thenCorrect()
  throws IOException {
    File fileToMove = new File("src/test/resources/fileToMove.txt");
    File destDir = new File("src/test/resources/");
    File targetFile = new File(destDir, fileToMove.getName());

    com.google.common.io.Files.move(fileToMove, targetFile);
}

繰り返しますが、この例では、移動するファイルとターゲットディレクトリが存在する必要があります。

5. コモンズIO

最後に、Apache Commons IOを使用したソリューションを見てみましょう。おそらく最も簡単なソリューションです。

@Test
public void givenUsingApache_whenMovingFile_thenCorrect() throws IOException {
    FileUtils.moveFile(
      FileUtils.getFile("src/test/resources/fileToMove.txt"),
      FileUtils.getFile("src/test/resources/fileMoved.txt"));
}

もちろん、この1行で移動または名前変更の両方が可能になります。ターゲットディレクトリが同じかどうかによって異なります。

または、具体的に移動するためのソリューションを次に示します。宛先ディレクトリがまだ存在しない場合は、自動的に作成することもできます。

@Test
public void givenUsingApache_whenMovingFileApproach2_thenCorrect() throws IOException {
    FileUtils.moveFileToDirectory(
      FileUtils.getFile("src/test/resources/fileToMove.txt"),
      FileUtils.getFile("src/main/resources/"), true);
}

6. 結論

We looked at renaming in these code snippetsですが、移動はもちろん同じです。異なる必要があるのはターゲットディレクトリだけです。

Javaでファイルを移動するための5つの簡単なソリューションがあります。