파일 입출력 - swkim0128/PARA GitHub Wiki
코틀린에서는 java.io.File 클래스를 활용하여 파일을 읽고, 쓰고, 수정할 수 있다. 또한, 코틀린 표준 라이브러리를 사용하면 더 간결하게 파일 입출력을 처리할 수 있다.
import java.io.File
fun main() {
val file = File("example.txt")
file.writeText("Hello, Kotlin!") // 파일에 텍스트 저장
}- 파일이 없으면 자동으로 생성됨.
- 파일의 기존 내용을 덮어쓴다.
import java.io.File
fun main() {
val file = File("example.txt")
file.appendText("\nWelcome to Kotlin File I/O!") // 기존 파일에 내용 추가
}- 기존 내용을 유지하면서 새로운 내용을 추가한다.
- 파일이 없으면 새로 생성된다.
import java.io.File
fun main() {
val file = File("example.txt")
file.bufferedWriter().use { writer ->
writer.write("First Line")
writer.newLine()
writer.write("Second Line")
}
}- use {} 블록을 사용하면 자동으로 close()가 호출됨.
- newLine()을 사용하여 줄바꿈이 가능하다.
import java.io.File
fun main() {
val file = File("example.txt")
val content = file.readText()
println(content)
}- 파일 내용을 문자열로 읽어올 수 있다.
- 파일이 존재하지 않으면 FileNotFoundException이 발생할 수 있다.
import java.io.File
fun main() {
val file = File("example.txt")
val lines = file.readLines()
for (line in lines) {
println(line)
}
}- 파일의 각 줄을 리스트로 반환한다.
- for 루프를 활용하여 줄 단위로 처리할 수 있다.
import java.io.File
fun main() {
val file = File("example.txt")
file.bufferedReader().use { reader ->
reader.forEachLine { line ->
println(line)
}
}
}- bufferedReader()를 사용하면 대량의 데이터를 효율적으로 읽을 수 있다.
- use {} 블록을 사용하여 자동으로 close() 호출.
파일이 존재하는지 확인하려면 exists() 함수를 사용한다.
import java.io.File
fun main() {
val file = File("example.txt")
if (file.exists()) {
println("파일이 존재합니다.")
} else {
println("파일이 존재하지 않습니다.")
}
}- 파일이 존재하면 true, 없으면 false를 반환한다.
파일을 삭제하려면 delete() 함수를 사용한다.
import java.io.File
fun main() {
val file = File("example.txt")
if (file.exists()) {
file.delete()
println("파일 삭제 완료")
} else {
println("삭제할 파일이 없습니다.")
}
}- 파일이 존재하면 삭제되고 true를 반환하며, 없으면 false를 반환한다.
import java.io.File
fun main() {
val dir = File("testDir")
if (dir.mkdir()) {
println("디렉토리 생성 완료")
} else {
println("디렉토리 생성 실패 또는 이미 존재함")
}
}- 디렉토리가 없을 경우 생성한다.
- 이미 존재하면 false를 반환한다.
import java.io.File
fun main() {
val dir = File("parentDir/childDir")
if (dir.mkdirs()) {
println("디렉토리 생성 완료")
} else {
println("디렉토리 생성 실패 또는 이미 존재함")
}
}- 여러 개의 디렉토리를 한 번에 생성할 수 있다.
import java.io.File
fun main() {
val dir = File("testDir")
if (dir.exists()) {
dir.deleteRecursively()
println("디렉토리 삭제 완료")
}
}- 디렉토리 안의 모든 파일과 서브디렉토리까지 삭제한다.
import java.io.File
fun main() {
val source = File("example.txt")
val destination = File("copy_example.txt")
source.copyTo(destination, overwrite = true)
}- copyTo()를 사용하면 기존 파일을 유지하면서 복사할 수 있다.
- overwrite = true를 설정하면 기존 파일을 덮어쓴다.
import java.io.File
fun main() {
val source = File("example.txt")
val destination = File("moved_example.txt")
source.renameTo(destination)
}- 파일 이름 변경 또는 새로운 위치로 이동 가능.
- 단순히 renameTo()를 사용하면 원본 파일이 이동됨.
파일 입출력은 예외가 발생할 가능성이 높으므로 예외 처리가 필요하다.
import java.io.File
import java.io.IOException
fun main() {
try {
val file = File("example.txt")
val content = file.readText()
println(content)
} catch (e: IOException) {
println("파일을 읽는 중 오류 발생: ${e.message}")
}
}- 예외가 발생하더라도 프로그램이 멈추지 않고 안전하게 처리된다.
| 기능 | 메서드 | 설명 |
|---|---|---|
| 파일 쓰기 | writeText() | 텍스트를 파일에 저장 (덮어쓰기) |
| appendText() | 기존 파일에 내용 추가 | |
| bufferedWriter() | 여러 줄을 효율적으로 쓰기 | |
| 파일 읽기 | readText() | 파일 전체 읽기 |
| readLines() | 파일을 한 줄씩 리스트로 읽기 | |
| bufferedReader() | 파일을 효율적으로 읽기 | |
| 파일 존재 여부 | exists() | 파일이 존재하는지 확인 |
| 파일 삭제 | delete() | 파일 삭제 |
| 디렉토리 생성 | mkdir(), mkdirs() | 단일 또는 다중 디렉토리 생성 |
| 디렉토리 삭제 | deleteRecursively() | 하위 디렉토리 포함하여 삭제 |
| 파일 복사 | copyTo() | 파일 복사 |
| 파일 이동 | renameTo() | 파일 이동 또는 이름 변경 |
- 파일을 읽고 쓰는 방법은 여러 가지가 있으며, 상황에 맞게 적절한 메서드를 사용해야 한다.
- 디렉토리 조작, 파일 삭제, 파일 복사 및 이동 기능도 간편하게 지원된다.
- 파일 입출력 작업은 예외 발생 가능성이 높으므로 반드시 예외 처리를 해야 한다.
코틀린의 표준 라이브러리를 활용하면 파일 입출력을 쉽게 처리할 수 있다.