Android Application
Kotlin 파일처리 : Stream Input, Output
작성자 임베디드코리아
작성일23-10-03 22:59
조회1,666회
댓글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 버튼을 누를시 입력창을 지운다.
}
}
}