본문 바로가기
Java

[Java/Spring] File 디렉터리(폴더)가 생성되지 않는 이슈[mkdir(), mkdirs()]

by 상후 2024. 6. 27.
728x90
반응형

 

 

프로젝트 중 디렉터리(폴더)가 생성되지 않는 현상을 발견하여 기록합니다.

샘플 코드는 아래와 같습니다.

 

테스트 케이스

 

File file = new File("C://test/shmoon/");

if (!file.exists()) {
    boolean isMakeDirectory = file.mkdir();
    if (isMakeDirectory) {
        System.out.println("디렉터리 생성 성공");
    } else {
        System.out.println("실패");
    }
}

 

C 드라이브에 아무 폴더도 없다고 생각하고 위 코드의 결과를 예상해보자.

꼼꼼히 보지 않았더라면 test 디렉터리 하위에 shmoon 디렉터리가 생성됐을 거라고 생각할 수 있다. (디렉터리 생성 성공 출력 예상)

 

하지만 실제 결과는 실패를 출력하고, 실제 C드라이브에서도 디렉터리가 생성되지 않음을 확인할 수 있다.

 

File file = new File("C://test/shmoon/");

if (!file.exists()) {
    boolean isMakeDirectory = file.mkdirs();
    if (isMakeDirectory) {
        System.out.println("디렉터리 생성 성공");
    } else {
        System.out.println("실패");
    }
}

 

그렇다면 위 코드는 어떨까?

해당 코드는 "디렉터리 생성 성공"을 출력하고, 실제로 디렉터리까지 생성됨을 확인할 수 있다.

 

 

 

 

차이점은 바로 mkdir()과 mkdirs()이다.

메서드의 설명을 보면 위 메서드들의 차이를 알 수 있습니다.

 

mkdir() : Creates the directory named by this abstract pathname.

-> 이 추상 경로 이름으로 명명된 디렉터리를 만듭니다.

 

mkdirs() : Creates the directory named by this abstract pathname, including any necessary but nonexistent parent directories. Note that if this operation fails it may have succeeded in creating some of the necessary parent directories.

-> 필요하지만 존재하지 않는 모든 상위 디렉터리를 포함하여 이 추상 경로 이름으로 명명된 디렉터리를 만듭니다.

 

mkdir()은 최종 경로에 있는 디렉터리를 만드는 것이기 때문에 "C://test/shmoon/"에서 C://test 디렉터리가 존재하지 않는다면 그대로 생성을 실패하는 것이다.

 

그에 반면에 mkdirs()는 필요하지만 존재하지 않는 모든 상위 디렉터리를 포함하여 만들기 때문에, 상위 디렉터리가 존재하지 않더라도 모두 생성하여 문제가 없던 것이다.

 

 

 

결과적으로 필자는 mkdir() 메서드를 사용하고 있었고, 상위 디렉터리가 존재하지 않아서 디렉터리가 만들어지지 않았던 것이다.

상위 디렉터리를 직접 만들어서 해결할 수도 있었지만, 좀 더 유연한 대처를 위해 mkdirs()를 활용하여 해결하는 방법을 선택했다.

mkdir() 보다는 mkdirs()를 활용하자

 

 

728x90
반응형

댓글