1. 概要

このクイックチュートリアルでは、以下を見ていきます。 Javaでファイルの名前を変更/移動します。

最初にNIOのFilesクラスとPathクラスを使用し、次にJava File クラス、Google Guava、最後にApacheCommonsIOを使用する方法を検討します。図書館。

この記事は、ここBaeldungの「Java –BacktoBasic」シリーズの一部です。

2. 設定

例では、次のセットアップを使用します。これは、ソースファイル名と宛先ファイル名の2つの定数と、テストを複数回実行できるようにするためのクリーンアップ手順で構成されています。

private final String FILE_TO_MOVE = "src/test/resources/originalFileToMove.txt";
private final String TARGET_FILE = "src/test/resources/targetFileToMove.txt";

@BeforeEach
public void createFileToMove() throws IOException {
    File fileToMove = new File(FILE_TO_MOVE);
    fileToMove.createNewFile();
}

@AfterEach
public void cleanUpFiles() {
    File targetFile = new File(TARGET_FILE);
    targetFile.delete();
}

3. NIOパスおよびファイルクラスの使用

Java NIOパッケージのFiles.move()メソッドを使用してから始めましょう。

@Test
public void givenUsingNio_whenMovingFile_thenCorrect() throws IOException {
    Path fileToMovePath = Paths.get(FILE_TO_MOVE);
    Path targetPath = Paths.get(TARGET_FILE);
    Files.move(fileToMovePath, targetPath);
}

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

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

4. ファイルクラスの使用

File.renameTo()メソッドを使用して同じを実行する方法を見てみましょう:

@Test
public void givenUsingFileClass_whenMovingFile_thenCorrect() throws IOException {
    File fileToMove = new File(FILE_TO_MOVE);
    boolean isMoved = fileToMove.renameTo(new File(TARGET_FILE));
    if (!isMoved) {
        throw new FileSystemException(TARGET_FILE);
    }
}

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

renameTo()は、次の2種類の例外のみをスローすることに注意してください。

  • SecurityException –セキュリティマネージャーが送信元または宛先への書き込みアクセスを拒否した場合
  • NullPointerException –パラメータターゲットがnullの場合

ターゲットがファイルシステムに存在しない場合(例外はスローされません)、メソッドの返された成功フラグを確認する必要があります。

5. グアバの使用

次へ–便利な Files.move()メソッドを提供するGuavaソリューションを見てみましょう。

@Test
public void givenUsingGuava_whenMovingFile_thenCorrect()
        throws IOException {
    File fileToMove = new File(FILE_TO_MOVE);
    File targetFile = new File(TARGET_FILE);

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

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

6. CommonsIOを使用

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

@Test
public void givenUsingApache_whenMovingFile_thenCorrect() throws IOException {
    FileUtils.moveFile(FileUtils.getFile(FILE_TO_MOVE), FileUtils.getFile(TARGET_FILE));
}

もちろん、この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. 結論

この記事では、Javaでファイルを移動するためのさまざまなソリューションについて説明しました。 これらのコードスニペットでは名前の変更に重点を置いていますが、移動はもちろん同じであり、ターゲットディレクトリのみが異なる必要があります。

例のコードは、GitHubから入手できます。