Android Application

Kotlin 파일처리 : Stream Input, Output

작성자 임베디드코리아 작성일23-10-03 22:59 조회1,558회 댓글0건

첨부파일

------------------------------------------------------------------------------------
      activity_main.xml
------------------------------------------------------------------------------------
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <EditText
        android:layout_width="483dp"
        android:layout_height="55dp"
        android:inputType="textPersonName"
        android:ems="10"
        android:id="@+id/editText"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintHorizontal_bias="0.504"
        app:layout_constraintVertical_bias="0.238"/>
    <Button
        android:text="쓰기"
        android:layout_width="148dp"
        android:layout_height="81dp" android:id="@+id/write"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintVertical_bias="0.361"
        app:layout_constraintHorizontal_bias="0.774"/>
    <Button
        android:text="읽기"
        android:layout_width="148dp"
        android:layout_height="81dp"
        android:id="@+id/read"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintVertical_bias="0.361"
        app:layout_constraintHorizontal_bias="0.216"/>
    <Button
        android:text="clear"
        android:layout_width="396dp"
        android:layout_height="78dp"
        android:id="@+id/clear"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintHorizontal_bias="0.48"
        app:layout_constraintVertical_bias="0.587"/>

</androidx.constraintlayout.widget.ConstraintLayout>

------------------------------------------------------------------------------------
    MainActivity.kt
------------------------------------------------------------------------------------
class MainActivity : AppCompatActivity(), View.OnClickListener{
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val read =  findViewById<Button>(R.id.read)
        val write =  findViewById<Button>(R.id.write)
        val clear =  findViewById<Button>(R.id.clear)

        read.setOnClickListener(this)
        write.setOnClickListener(this)
        clear.setOnClickListener(this)

    }

    override fun onClick(view: View?) {
        val edit = findViewById<EditText>(R.id.editText)

        if(view?.id==R.id.read){

            var reader: BufferedReader? = null
            //저장내용을 읽어들이는 reader라는 변수를 null로 초기화

            val `in`: InputStream? = openFileInput(NOTES)
            //NOTES라는 파일에 저장하된 `in`이라는 변수

            try {
                if (`in` != null) { //저장내용이 null이 아닐때
                    reader = BufferedReader(InputStreamReader(`in`))
                    //reader라는 변수(BufferedReader)통해 저장내용을 읽어들인다.
                    var str: String? = null
                    //StringBuffer는 ()안에 값을 입력받고 후에 수정도 가능한 메서드다
                    val buf = StringBuffer()


                    while (reader.readLine().also { str = it } != null) {

                        //readLine하고 전달받은 it은 str로 초기화 일때, 그 값은 null이 아니다
                        //즉 전달받은 값이 있으므로 저장된 값이 있다는 말
                        println("$str")

                        //StringBuffer의 빈 값에 입력받은 str을 넣는다.
                        buf.append("""$str""") //실제 읽는 부분
                    }
                    edit.setText(buf.toString()) // 불러온 값을 buf를 통해 edit창에 불러온다.
                }

            } catch (e: FileNotFoundException){
            } catch(e:Exception){
                println(e.message)
                Toast.makeText(this,"예외: $e", Toast.LENGTH_SHORT).show()
            } finally {
                if(reader!=null) try{
                    reader?.close()
                }catch (e:Exception){ }
            }
        }
        else if(view?.id==R.id.write){

            var  out: OutputStreamWriter? = null

            try{ //PRIVATE으로 적으면 덮어쓰기 된다 MODE_APPEND는 이어쓰기
                out = OutputStreamWriter(openFileOutput(NOTES, MODE_PRIVATE))
                out.write(edit.text.toString()) //입력된 값을 저장한다.

                Toast.makeText(this,"데이터 저장",Toast.LENGTH_SHORT).show()

            }catch (e:Exception){
                e.printStackTrace()
            }finally {
                if(out != null) try{
                    out.close()
                }catch (e: IOException){}
            }

        }
        else if(view?.id==R.id.clear){
            edit.setText("")
            //clear 버튼을 누를시 입력창을 지운다.

        }

    }

}