Computer >> 컴퓨터 >  >> 프로그래밍 >> Java

Java에서 디렉터리 계층 구조를 한 번에 생성하는 방법 (createDirectories vs mkdirs)

Java 프로그램을 개발하다 보면 여러 단계로 이루어진 디렉터리(폴더)를 한 번에 생성해야 하는 경우가 자주 있습니다. 예를 들어 sample1/sample2/sample3처럼 중첩된 경로를 만들 때, 각 디렉터리를 하나씩 순서대로 만들 필요 없이 한 번의 호출로 전체 계층 구조를 생성할 수 있습니다.

Java 7부터 도입된 Files 클래스는 파일과 디렉터리를 다루는 다양한 정적(static) 메서드를 제공합니다. 그중 createDirectories() 메서드를 사용하면 지정한 경로의 디렉터리뿐만 아니라 존재하지 않는 모든 상위(parent) 디렉터리까지 한꺼번에 생성할 수 있습니다.

방법 1: Files.createDirectories() 사용하기

다음은 java.nio.file.Files 클래스의 createDirectories() 메서드를 활용하여 디렉터리 계층 구조를 생성하는 예제입니다.

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Scanner;
public class Demo {
    public static void main(String args[]) throws IOException {
        System.out.println("Enter the path to create a directory: ");
        Scanner sc = new Scanner(System.in);
        String pathStr = sc.next();
        System.out.println("Enter the required directory hierarchy: ");
        pathStr = pathStr+sc.next();
        // Path 객체 생성
        Path path = Paths.get(pathStr);
        // 디렉터리 생성
        Files.createDirectories(path);
        System.out.println("Directory hierarchy created successfully");
    }
}

실행 결과

Enter the path to create a directory:
D:
Enter the required directory hierarchy:
sample1/sample2/sample3/final_directory
Directory hierarchy created successfully

위 코드를 실행한 후 실제 파일 시스템을 확인하면, D: 드라이브 아래에 sample1 → sample2 → sample3 → final_directory로 이어지는 전체 디렉터리 계층이 한 번에 생성된 것을 확인할 수 있습니다.

방법 2: File.mkdirs() 사용하기

Java 초기 버전부터 사용해 온 전통적인 방법으로는 java.io.File 클래스의 mkdirs() 메서드가 있습니다. 이 메서드는 현재 File 객체가 나타내는 경로에 해당하는 디렉터리를 생성하며, 존재하지 않는 상위 디렉터리도 함께 만들어 줍니다.

import java.io.File;
import java.io.IOException;
import java.util.Scanner;
public class Demo {
    public static void main(String args[]) throws IOException {
        System.out.println("Enter the path to create a directory: ");
        Scanner sc = new Scanner(System.in);
        String pathStr = sc.next();
        System.out.println("Enter the required directory hierarchy: ");
        pathStr = pathStr+sc.next();
        // File 객체 생성
        File file = new File(pathStr);
        // 디렉터리 생성
        boolean bool = file.mkdirs();
        if(bool){
            System.out.println("Directory created successfully");
        }else{
            System.out.println("Sorry couldn't create specified directory");
        }
    }
}

실행 결과

Enter the path to create a directory:
D
Enter the required directory hierarchy:
sample1/sample2/sample3/final_directory
Directory created successfully

마찬가지로 실행 후 파일 탐색기에서 확인하면 지정한 경로에 전체 디렉터리 계층 구조가 생성된 것을 볼 수 있습니다.

두 방법의 차이점 비교

  • Files.createDirectories(): Java 7 이상(NIO.2)에서 권장되는 방식으로, 이미 동일한 이름의 디렉터리가 존재해도 예외 없이 정상 종료됩니다. 실패 시 IOException을 발생시켜 원인 파악이 용이합니다.
  • File.mkdirs(): Java 1.0부터 제공된 레거시 방식입니다. 반환값이 boolean이므로 성공 여부만 알 수 있고, 실패 원인(권한 문제, 부모가 파일인 경우 등)을 구체적으로 알려주지 않습니다.

새로운 프로젝트라면 더 안전하고 명확한 오류 처리를 제공하는 Files.createDirectories() 사용을 권장합니다.