Android 내부 저장소에 텍스트 파일 저장/읽기 + 오류 로그 기록 방법
✨ 개요
Android에서는 내부 저장소(Internal Storage)를 사용하여
앱 전용 파일을 안전하게 저장할 수 있습니다.
또한 앱 문제 발생 시, 간단한 로그 파일을 남겨 디버깅이나 분석에 활용할 수도 있습니다.
- 텍스트 파일을 저장/읽는 방법
- 예외 발생 시 로그 파일로 기록하는 방법
1. ✅ 앱 내부 저장소란?
- 앱 전용 디렉토리로, 다른 앱이 접근할 수 없습니다.
- 앱이 삭제되면 내부 저장소에 저장된 데이터도 함께 삭제됩니다.
- 파일 경로:
/data/data/패키지명/files/
2. ✅ 파일 저장: 텍스트 쓰기
val fileName = "text.txt"
val text = "this is text!!"
button.setOnClickListener {
saveTextToFile(fileName, text)
}
fun Context.saveTextToFile(fileName: String, text: String) {
openFileOutput(fileName, Context.MODE_PRIVATE).use { outputStream ->
outputStream.write(text.toByteArray())
}
}
- Context.MODE_PRIVATE: 파일을 현재 앱만 사용할 수 있도록 설정
- openFileOutput: 내부 저장소에 파일 생성 및 쓰기
3. 🔥 파일 읽기: 텍스트 읽어오기
val fileName = "text.txt"
val result = readTextFromFile(fileName)
Log.e(TAG, "result=$result") // this is text!!
fun Context.readTextFromFile(fileName: String): String {
return try {
openFileInput(fileName).bufferedReader().use { it.readText() }
} catch (e: Exception) {
""
}
}
- 파일이 없거나 오류 발생 시 빈 문자열 반환
- 예외 처리를 통해 앱이 크래시 나지 않도록 처리 (try-catch)
4. 📊 문제 발생 시 오류 로그 저장하기
try {
val result = 4 / 0
} catch (e: Exception) {
saveErrorLog(e)
}
fun Context.saveErrorLog(exception: Throwable) {
val errorLog = "Time: ${System.currentTimeMillis()}\nError: ${exception.stackTraceToString()}\n\n"
openFileOutput("error_log.txt", Context.MODE_APPEND).use { outputStream ->
outputStream.write(errorLog.toByteArray())
}
}
- Context.MODE_APPEND: 기존 파일에 이어서 저장
- stackTraceToString(): 예외 전체 스택을 문자열로 변환
5. 결론
- Android 내부 저장소는 앱 전용 데이터 보관에 안전합니다.
- 간단한 설정 저장, 텍스트 기록, 에러 로깅에 매우 유용합니다.
- 문제 발생 시 즉시 로그 파일에 기록하는 습관을 들이면 나중에 디버깅, 고객 지원할 때 큰 도움이 됩니다.