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)참고
Related Posts
- Java - Unsupported class file major version 61 에러
- Java - String.matches()로 문자열 패턴 확인 및 다양한 예제 소개
- Java - 문자열 공백제거 (trim, replace)
- Java - replace()와 replaceAll()의 차이점
- Java - ArrayList 초기화, 4가지 방법
- Java - 배열 정렬(Sorting) (오름차순, 내림차순)
- Java - 문자열(String)을 비교하는 방법 (==, equals, compare)
- Java - StringBuilder 사용 방법, 예제
- Java - 로그 출력, 파일 저장 방법 (Logger 라이브러리)
- Java IllegalArgumentException 의미, 발생 이유
- Java - NullPointerException 원인, 해결 방법
- Seleninum의 ConnectionFailedException: Unable to establish websocket connection 해결
- Java - compareTo(), 객체 크기 비교
- Java - BufferedReader로 파일 읽기
- Java - BufferedWriter로 파일 쓰기
- Java - BigInteger 범위, 비교, 연산, 형변환
- Java charAt() 함수 알아보기
- Java contains()로 문자(대소문자 X) 포함 확인
- Java - Set(HashSet)를 배열로 변환
- Java - 문자열 첫번째 문자, 마지막 문자 확인
- Java - 문자열 한글자씩 자르기
- Java - 문자열 단어 개수 가져오기
- Java - 1초마다 반복 실행
- Java - 배열을 Set(HashSet)로 변환
- Java - 여러 Set(HashSet) 합치기
- Java - 명령행 인자 입력 받기
- Java - 리스트 역순으로 순회, 3가지 방법
- Java - 특정 조건으로 리스트 필터링, 3가지 방법
- Java - HashMap 모든 요소들의 합계, 평균 계산
- Java - 특정 조건으로 HashMap 필터링
- Java - 싱글톤(Singleton) 패턴 구현
- Java - 숫자 왼쪽에 0으로 채우기
- Java - String 배열 초기화 방법
- Java - 정렬된 순서로 Map(HashMap) 순회
- Java - HashMap에서 key, value 가져오기