반응형
//저장버튼 누르면
saveButton.setOnClickListener {
val text = textField.text.toString()
when{
TextUtils.isEmpty(text) -> Toast.makeText(applicationContext, "텍스트 볏다", Toast.LENGTH_LONG).show()
!isExternalStorageWritable() -> Toast.makeText(applicationContext,"외부 저장장치 없음", Toast.LENGTH_LONG).show()
else -> {
// 내부저장소에 저장
//saveToInnerStorage(text, filename)
//외부저장소에 저장
saveToExternalStorage(text,filename)
Toast.makeText(applicationContext,"${text}가 저장되엇읍니다",Toast.LENGTH_LONG).show()
textField.setText("초기화요")
}
}
}
//불러오기버튼
loadButton.setOnClickListener {
try {
//내부 저장소에서 불러옴
//textField.setText(loadFromInnerStorage(filename))
//외부 저장소에서 불러옴
textField.setText(loadFromExternalStorage(filename))
}catch (e : FileNotFoundException){
Toast.makeText(applicationContext, "저장된 텍스트 업승ㅁ", Toast.LENGTH_LONG).show()
}
}
//외부 저장장치 사용가능 여부 체크
fun isExternalStorageWritable() : Boolean{
when{
//외부저장장치 상태가 media-mounted면 사용가능
Environment.getExternalStorageState() == Environment.MEDIA_MOUNTED -> return true
else -> return false
}
}
//외부저장장치에서 앱 전용데이터로 사용할 파일 객체를 반환
fun getAppDataFileFromExternalStorage(filename: String) : File{
//kitkat버전부터는
val dir = if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT){
getExternalFilesDir(Environment.DIRECTORY_DOCUMENTS)
//하위버전에서는 디렉토리 직접 입력
}else{
File(Environment.getExternalStorageDirectory().absolutePath+"/Documents")
}
// 디렉토리없으면 만듦
dir?.mkdirs()
return File("${dir!!.absolutePath}${File.separator}${filename}")
}
//외부 저장소에 데이터 저장
fun saveToExternalStorage(text: String, filename: String){
val fileOutputStream = FileOutputStream(getAppDataFileFromExternalStorage(filename))
fileOutputStream.write(text.toByteArray())
fileOutputStream.close()
}
//외부 저장소에서 데이터 가져옴
fun loadFromExternalStorage(filename: String) :String {
return FileInputStream(getAppDataFileFromExternalStorage(filename)).reader().readText()
}
반응형
'IT > Android' 카테고리의 다른 글
Kotlin] 안드로이드 스레드 만들기 (0) | 2020.03.17 |
---|---|
Kotlin] 안드로이드 처음 로딩화면 만들기 (0) | 2020.03.11 |
Kotlin] Datepicker 날짜 계산 (연, 월+1, 일) (0) | 2020.03.08 |
Kotlin] 내부저장소 저장 & 가져오기 (2) | 2020.03.05 |
Kotlin] 명시적, 암시적 Intent (0) | 2020.03.02 |
댓글