테스트 환경
- M1 Mac OS Monterey 12.5.1
- Android Studio Chipmunk 2021.2.1 Patch1 (ARM)
- Gradle 7.2
- Android Build Gradle 7.1.2
- Kolin 1.7.0
개요
Android 에서 File 관련 작업을 오랜만에 하던 중에 궁금한 것이 생겼습니다.
바로 File API 에서 자주 쓰이는 mkdir(), mkdirs() 두 함수의 대한 것이었는데요.
사용할때 마다 "이게 뭐지?" 라고 구글링 후 "아 이거구나" 하고 쓴 뒤에 기록을 하지않아서
늘 새로찾아보는데요 ㅠㅠ
그래서 기록겸 두 함수에 대해서 설명하려고 합니다.
File.mkdir()
먼저 mkdir() 함수는 make directory 의 약어로 File 객체가 현재 가지고 있는 경로에 폴더를 생성하는 함수 입니다.
보통 아래 코드 처럼 exists() 함수와 함께 사용하게 됩니다.
val createDir = File("./some/childDir")
if (!createDir.exists()) {
createDir.mkdir()
}
childDir 이 존재 하지 않을 시 childDir 폴더를 생성하는 코드입니다.
그러나 mkdirs() 와의 중요한 차이점은 예제에서 처럼 some 이라는 부모 폴더가 생성되어 있지 않다면
하위 childDir 이라는 폴더를 mkdir() 함수로 만드려고 할 때 실패하기 때문에
무조건 반환 값으로 false 가 오게 됩니다.
하지만 이 같은 문제점은 mkdirs() 함수를 사용 하면 해결 할 수 있습니다.
File.mkdirs()
mkdirs() 함수는 mkdir() 함수와 다르게 만드려고 하는 최종 폴더 경로에
부모 폴더가 존재하지 않는다면 그 부모 폴더도 함께 생성하고
그 부모 폴더의 하위 폴더로 생성하여 줍니다.
아래 코드에서 mkdir() -> mkdirs() 로 변경하여 주면 해결 됩니다.
val createDir = File("./some/childDir")
if (!createDir.exists()) {
createDir.mkdirs()
}
childDir 을 생성하기 전에 생성하려 경로에 있는 부모 폴더들이 존재하는지 여부를 확인 후
존재 하지 않는다면 그 부모 폴더들을 생성하고 생성된 부모 폴더의 하위에 생성하여 줍니다.
이 점이 mkdir() 함수와의 가장 큰 차이점이라고 할 수 있습니다.
위 예제에서는 some 이라는 부모 폴더가 존재하지 않으므로 먼저 some 이라는 폴더가 생성되고
그 하위 폴더로 childDir 이 생성 된 것을 확인 할 수 있습니다.
이상으로 포스팅을 마치겠습니다.
감사합니다.
'Develop > Kotlin' 카테고리의 다른 글
[Kotlin] 3 - 함수 (0) | 2020.04.08 |
---|---|
[Kotlin] 2 - 조건문과 조건식 (0) | 2020.04.08 |
[Kotlin] 1 - 타입, 변수, 상수 (0) | 2020.04.08 |