본문 바로가기
IT/Android

Kotlin] 외부저장소 저장 & 가져오기

by 깻잎쌈 2020. 3. 5.
반응형

//저장버튼 누르면
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()
    }
반응형

댓글