폴더 안에 있는 여러 개의 파일 이름을 일괄적으로 변경해야 하는 경우가 종종 있습니다. Java에서는 File 클래스를 활용하면 이 작업을 간단하게 자동화할 수 있습니다. 아래 예제 코드는 지정된 폴더 내의 모든 파일을 순회하며 파일 이름을 변경하는 방법을 보여줍니다.
예제 코드
import java.io.File;
import java.io.IOException;
public class Demo{
public static void main(String[] argv) throws IOException{
String path_to_folder = "path\\to\\folder\\where\\multiple\\files\\are\\present";
File my_folder = new File(path_to_folder);
File[] array_file = my_folder.listFiles();
for (int i = 0; i < array_file.length; i++){
if (array_file[i].isFile()){
File my_file = new File(path_to_folder + "\\" + array_file[i].getName());
String long_file_name = array_file[i].getName();
String[] my_token = long_file_name.split("\\s");
String new_file = my_token[1];
System.out.println(long_file_name);
System.out.print(new_file);
my_file.renameTo(new File(path_to_folder + "\\" + new_file + ".pdf"));
}
}
}
}실행 결과
폴더 내의 파일들이 .pdf 확장자를 가진 새 이름으로 변경됩니다.
코드 동작 방식
이 코드가 어떻게 동작하는지 단계별로 살펴보겠습니다.
1. 폴더 경로 정의 및 폴더 객체 생성
Demo라는 이름의 클래스 안에 main 함수가 있으며, 이 함수에서는 이름을 변경할 여러 파일이 들어 있는 폴더의 경로(path_to_folder)를 먼저 정의합니다. 그런 다음 해당 경로를 기반으로 File 객체인 my_folder를 생성합니다.
2. 파일 목록 가져오기
listFiles() 메서드를 호출하면 폴더 내부에 있는 모든 파일과 하위 디렉터리의 목록을 File 배열 형태로 얻을 수 있습니다.
3. 파일 순회 및 이름 분리
배열에 담긴 항목들을 반복문으로 하나씩 확인하면서, 해당 항목이 실제 파일인지 isFile() 메서드로 검사합니다. 파일인 경우 전체 파일 이름을 가져온 뒤, split("\\s")를 사용해 공백 문자를 기준으로 이름을 나눕니다. 그리고 공백 뒤에 오는 두 번째 토큰(my_token[1])을 새 파일 이름으로 사용합니다.
4. 파일 이름 변경
마지막으로 renameTo() 메서드를 호출하여 기존 파일의 이름을 새 이름과 .pdf 확장자를 붙인 형태로 변경합니다. 즉, 원래 긴 파일 이름에서 첫 번째 공백 이후의 부분만 추출해 짧고 깔끔한 이름으로 바꾸는 것입니다.
참고 사항
실무에서 이 코드를 활용할 때는 몇 가지 주의할 점이 있습니다.
- 경로 구분자: Windows에서는 역슬래시(\)를 사용하지만, 운영체제 독립적인 코드를 원한다면 File.separator나 슬래시(/)를 사용하는 것이 좋습니다.
- null 검사: 폴더 경로가 잘못되면 listFiles()가 null을 반환할 수 있으므로 사전에 유효성 검사를 추가하는 것이 안전합니다.
- 확장자 유연성: 예제에서는 모든 파일을 .pdf로 변경하지만, 필요에 따라 확장자를 변수로 처리하면 더 범용적으로 사용할 수 있습니다.
- NIO 활용: Java 7 이상에서는 java.nio.file.Files.move()와 Path API를 사용하는 것이 더 권장되는 방식입니다.