GDSC HUFS 3기/Android with Kotlin Team 3

[3팀] 16 파일 입출력

darly213 2021. 11. 30. 00:02

이 글은 이것이 안드로이드다 with 코틀린(개정판)를 참고하여 작성하였습니다.

작성자 : 강다인

개발환경은 Windows, Android Studio입니다.

 

1. 파일 쓰기: Write

먼저 xml 탭에서 ImageVies와 textView 위젯을 사용하여 다음과 같이 화면을 구성합니다.

btnSave 버튼을 누르면 content, directort_name, filename을 파라미터로 갖는 writeTextFile을 실행하도록 한다.

binding.btnSave.setOnClickListener
{    
	val content = binding.textWrite.text.toString()    
    val directory_name = "memo"    
    val filename = "memo02.txt"    
    writeTextFile(directory_name, filename, content)
}

 

함수 writeTextFile를 정의 한다. 변수 dir을 file의 directory 값을 갖도록 선언한다. If 만약 dir이 없다면 dir.mkdirs 메써드를 사용하여 dir값을 생성한다.

fun writeTextFile(directory: String, filename: String, content: String) {    
	val dir = File(filesDir.path +"/"+directory)    
	if(!dir.exists()) 
    	dir.mkdirs()
}

dir.path filename을 더해서 변수 fullPath를 선언하여 전체 파일 위치를 나타낸다. FileWriter(위치) 메써드로 파일을 작성한다. 그리고 속도를 빠르게 하기 위해서 buffer를 사용한다.

val fullPath = dir.path + "/" + filename    
val writer =  FileWriter(fullPath)    
val buffer = BufferedWriter(writer)    
buffer.write(content)    
buffer.close()    
writer.close()}

 

이제 에뮬레이터를 앱을 실행하면 왼쪽 아래와 같은 화면이 나타난다. 그리고 Hello를 입력하고 저장한다.

DeviceFileExplorer를 통해서 입력한 값(Hello)이 앱 데이터에 저장되어 있는 것을 확인할 수 있다.

 

2. 파일 읽기:Read

Path를 파라미터로 갖고 retrun 값을 String으로 갖는 함수 ‘readTextfile’을 정의한다. If 만약 fullpath값이 없다면 “”값(빈)을 retrun한다. 

 

읽기 매써드 FileReader(위치)를 사용하여 val 변수 reader를 선언한다. Write와 마찬가지로 buffer를 사용하고 while 반복문을 사용하여 한 줄씩 읽어온다. 그리고 그 읽은 값을 저장하기 위해 BufferReadr매써드를 사용하여 val 변수 result를 선언한다. 변수 result가 nul일 때 while반복문을 나가도록 하면  나갈 때 값이 저장되지 않으므로 변수 temp를 선언해준다.

val reader = FileReader(fullpath)    
val buffer = BufferedReader(reader)    
val result = StringBuffer()    
var temp:String? = ""    
while(true) {        
	temp = buffer.readLine()        
    if(temp == null ) 
    	break        
	result.append(temp)    
}    
buffer.close()    
reader.close()    
return result.toString()

다음 val 변수 path와 writtenContent를 선언해준다.

val path = directory_name + "/" + filename
val writtenContent = readTextFile(path)

그리고 ‘textRead’ textView위젯의 내용을 writtenContent로 만들어준다.

textRead.text = writtenContent

이제 에뮬레이터를 앱을 실행하면 왼쪽 아래와 같은 화면이 나타난다. 그리고 Hello를 입력하고 저장한다. 그러면 textRead’ textView위젯에 Hello가 입력된 것을 볼 수 있다.