Java - 파일 rename, move 하는 방법 및 예제

JS · 30 Apr 2020

Java에서 다양한 방법으로 파일의 이름을 변경하거나 이동시킬 수 있습니다. 이동한다는 것이 파일 이름을 변경하는 것과 같은 의미이기 때문에 rename과 move는 동일한 의미라고 생각할 수 있습니다.

파일 이름 변경 또는 이동

File 클래스를 이용하여 파일을 이동시킬 수 있습니다.

다음은 myfile이라는 폴더의 이름을 myfile_renamed라는 이름으로 변경하는 코드입니다.

File file = new File("/home/mjs/test/myfile");
boolean success = file.renameTo(new File("/home/mjs/test/myfile_renamed"));
if (!success) {
    System.out.println("Failed to rename to /home/mjs/test/myfile_renamed");
}

파일이 존재하지 않는 등의 예외가 발생할 때 rename이 실패할 수 있습니다.

파일 이름 변경 또는 이동 (Java7)

Java7에서 제공하는 Files와 Path 클래스를 이용하여 파일을 이동시킬 수 있습니다.

다음은 myfile이라는 폴더의 이름을 myfile_renamed라는 이름으로 변경하는 코드입니다.

try {
    Path filePath = Paths.get("/home/mjs/test/myfile");
    Path filePathToMove = Paths.get("/home/mjs/test/myfile_moved");
    Files.move(filePath, filePathToMove);
} catch (IOException e) {
    e.printStackTrace();
}

파일 이름 변경 또는 이동 (Commons IO)

commons-io 라이브러리의 FileUtils를 이용하여 파일을 이동시킬 수 있습니다.

Gradle 프로젝트는 build.gradle의 dependencies에 다음과 같이 추가합니다.

dependencies {
  compile group: 'commons-io', name: 'commons-io', version: '2.6'
  ...
}

Maven 등의 다른 빌드시스템을 사용하는 프로젝트는 mvnrepository.com을 참고하셔서 설정하시면 됩니다.

다음은 FileUtils를 이용하여 myfile 폴더의 이름을 myfile_renamed로 변경하는 예제입니다.

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

moveDirectory()는 디렉토리의 이름 또는 위치를 변경합니다.

폴더가 아닌 파일의 이름이나 위치를 변경하려면 다음과 같이 moveFile()을 사용하면 됩니다.

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

moveFile()는 인자로 전달되는 Path로 파일을 이동시킵니다. 이동하는 경로에 생성되지 않은 directory가 있다면 그 폴더를 자동으로 생성해 줍니다. 위의 예제에서는 /home/mjs/test/new_folder 폴더가 존재하지 않을 때 이 폴더를 만들어주고 파일을 옮깁니다.

만약 존재하지 않는 폴더는 생성하고 싶지 않다면 다음과 같이 moveFileToDirectory(src, des, createDestDir)을 사용하면 됩니다. 마지막 인자 createDestDir에 false를 전달하면, 존재하지 않는 폴더는 생성하지 않습니다. 반대로 true를 전달하면 폴더를 생성해 줍니다.

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

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

java.io.FileNotFoundException: Destination directory '/home/mjs/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)

참고