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를 리턴합니다. 파일이 존재하지 않는 등의 이유로 rename이 실패할 수 있습니다.

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()는 인자로 전달되는 Path로 파일을 이동시킵니다. 이동하는 경로에 생성되지 않은 directory가 있다면 그 폴더를 자동으로 생성해 줍니다. 위의 예제에서는 /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();
}

폴더가 존재하지 않을 때 파일은 이동되지 않으며, 다음과 같은 Exception을 발생시킵니다.

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)

참고

Loading script...

Related Posts

codechachaCopyright ©2019 codechacha