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)
참고
Related Posts
- Java - 람다식(Lambda)과 함수형 인터페이스
- Java - 직렬화(Serialize), 역직렬화(Deserialize)
- Java - do while과 while의 차이점
- Java - List empty(null) 체크, 3가지 방법
- Java - ArrayList 초기화, 4가지 방법
- Java - HashSet.addAll()
- Java - HashSet.contains()
- Java - 2차원 배열 선언, 출력 방법
- Java - 리스트 정렬, 3가지 방법
- Java - HashSet 정렬, 3가지 방법
- Java - 리스트 (List, ArrayList)
- Java - 첫 글자만 대문자로 바꾸는 방법
- Java - hashCode(), 사용하는 이유? 구현 방법?
- Java8의 Stream reduce() 사용 방법 및 예제
- Java - filter, map, flatMap 사용 방법 및 예제
- Java - 2개의 Map 합치기 (merge, putAll)
- Java - ConcurrentModificationException 원인 및 해결 방법
- JUnit - @After와 @AfterClass의 차이점
- JUnit - @Before와 @BeforeClass의 차이점
- java와 javac의 차이점
- Java - 자바(JDK) 버전 확인 방법 (터미널, cmd 명령어)
- Java - java.util.Date를 java.sql.Date로 변환
- Java - 시스템 운영체제(OS) 정보 확인
- Java - 코드 실행 시간 측정
- Java - HashSet.retainAll() 사용 방법 및 예제
- Java - ArrayList.retainAll() 사용 방법 및 예제
- Java - ArrayList를 String으로 변환
- Java - float을 int로 변환
- Java - float을 String으로 변환
- Java - String을 boolean으로 변환
- Java - XML을 JSON으로 변환
- Java - ClassNotFoundException 발생 원인 및 해결 방법
- Java - private 생성자를 사용하는 이유
- Java - non-static method cannot be referenced from a static context
- Java - NoSuchMethodError 원인 및 해결 방법