file.delete()를 사용했을 때 내가 의도한대로 동작하지 않는 경우가 있었다.
file.delete()가 실패해서 false를 반환하는 원인은 여러가지가 있는데
몰랐던 사실을 알게 되어 원인 및 해결 방법을 간략하게 정리해보려고 합니다.
1. File.delete() Return False 원인
File.delete 메서드가 실패한(Return False) 원인에 대한 정보는 제공해 주지 않습니다.
삭제가 실패한 이유는 사용자가 직접 찾아야 합니다.
일반적으로 크게 아래 4가지가 원인이 될 수 있다고 생각하면 좋을 것 같습니다.
- 권한 문제 (WRITE_EXTERNAL_STORAGE, READ_EXTERNAL_STORAGE)
- 비어 있지 않은 디렉터리인 경우
- 해당 파일이 실행되어 있는 경우
- 해당 파일이 존재하지 않는 경우
저 같은 경우 비어 있지 않은 디렉터리를 삭제 시도했을 때 실패하는 상황이였어요.
(이번에 알게 된 사실...ㅠㅠ)
끝으로 비어있지 않은 디렉터리인 경우 삭제하는 방법을 알아보고 마무리 하겠습니다.
2. 디렉터리 삭제
비어있지 않은 디렉터리를 삭제하는 예시 입니다.
파일이 디렉터리인 경우 하위 파일들을 모두 비워주고 삭제하는 deleteFile() 메서드를
작성해서 테스트해봤는데 잘 동작하네요 ㅎㅎ
val file = File(path)
if (file.exists()) {
//file.delete() // return false
deleteFile(file) // return true
}
if (file.isDirectory) {
val files = file.listFiles()
if (files != null) {
for (f in files) {
deleteFile(f)
}
}
}
return file.delete()
}
[Reference]