파일 I/O 처리
스트림 및 버퍼 처리
- 파일 처리는
Input
과 Output
에 대한 데이터 처리임. 이런 데이터가 계속 처리되어 흐르는 것과 같아 스트림(Stream
)이라고 함.
- 이는 바이트나 텍스트 단위로 처리해서 사람이 인식할 수 있게 만들어야함.
- I/O 처리 성능을 향상하기 위해 중간에 저장공간을 두고 처리하는 방식을 버퍼(
Buffer
) 처리라고 함.
- 기본적으로 파일을 읽고 쓰는 기반은
InputStream
, OutputStream
임.
- 이를 기반으로 바이트 단위로 처리하도록 지원하는 것이
ByteArrayInputStream
, ByteArrayOutputStream
임.
- 바이트 스트림은 기본적으로 데이터를 읽고 쓰는 것임.
read
메서드로 바이트 단위로 읽음.
write
메서드로 바이트 단위로 사용함.
- 스트림 처리의 기본은 하나 입력하면 하나를 출력함.
- 중간에 버퍼를 지정하고 처리하면 빠르게 입출력 가능
파일 처리 : 읽기
- I/O의 기본은 스트림이므로 이를 상속한 파일도 스트림으로 처리함.
- 파일은
FileInputStream
의 read
메서드로 바이트 단위로 읽음.
- 읽은 파일을 다른 파일에 저장하려면 while을 사용하여 한 바이트씩 읽고, 한 바이트씩 파일에 저장.
- 이땐
FileOutputStream
이 write
메서드를 사용.
- 파일 처리가 끝나면 항상
close
메서드로 닫아야함.
import java.io.FileInputStream
import java.io.FileOutputStream
fun main() {
val fileInputStream = FileInputStream("/Users/jiwon_dev/Desktop/data.txt")
val fileOutputStream = FileOutputStream("/Users/jiwon_dev/Desktop/dataout.txt")
var data = fileInputStream.read()
while (data != -1) {
fileOutputStream.write(data)
data = fileInputStream.read()
}
fileInputStream.close()
fileOutputStream.close()
val fileInputResultStream = FileInputStream("/Users/jiwon_dev/Desktop/dataout.txt")
var readData = fileInputResultStream.read()
while(readData != -1) {
print(readData.toChar())
readData = fileInputResultStream.read()
}
fileInputResultStream.close()
}
실행결과 : test
버퍼리더를 사용해 파일 처리
- 입력 스트림으로 객체를 생성하고 버퍼를 사용해 텍스트로 파일을 읽음.
File
로 파일을 열고 InputStream
으로 변경
fun main() {
val fileInputStream = File("/Users/jiwon_dev/Desktop/data.txt").inputStream()
val inputString = fileInputStream.bufferedReader().use { it.readLine() }
println(inputString)
}
실행결과 : test test1 test2
파일 처리 : 쓰기
FileWriter
의 인자에 파일 경로를 전달하여 파일을 생성함.