4. 파일 입출력
페이지 정보
작성자 관리자 댓글 0건 조회 2,214회 작성일 21-10-11 11:06본문
4. 파일 입출력
1. 저장소의 종류와 권한
안드로이드는 리눅스 위에 가상 머신이 동작하는 플랫폼이기 때문에 리눅스 기반의 파일 시스템을 사용합니다. 리눅스 파일 시스템은 설치된 앱마다 리눅스 사용자 아이디와 그에 해당하는 디렉터리가 할당되며 각각의 디렉터리는 해당 사용자만 접근할 수 있습니다. 이 디렉터리처럼 특정 앱의 사용자만 접근할 수 있는 영역을 내부 저장소라고 하고, 모든 앱이 공용으로 사용할 수 있는 영역을 외부 저장소라고 합니다.
내부 저장소
내부 저장소는 주로 내 앱에서만 사용하는 데이터를 저장하며 특별한 권한이 없어도 읽고 쓸 수 있습니다.
외부 저장소
외부 저장소는 일종의 공용 공간이기 때문에 외부 저장소에 저장된 파일에 접근하려면 외부 저장소 접근 권한을 명세해야 합니다.
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
외부 저장소에는 서로 다른 앱 간에 공유가 필요한 데이터를 저장합니다.
2. 내부 저장소 파일 읽기 / 쓰기
파일이 텍스트 파일이냐 아니냐에 따라서 파일을 읽고 쓰기 위해 사용하는 API가 달라집니다.
파일 정보 가져오기
파일에 대한 정보는 File 객체를 통해 얻을 수 있습니다.
val file = File("경로")
// 파일의 존재 여부
if (file.exists()) {
// ...
}
// 경로에 해당하는 것이 파일인지 여부
if (file.isFile) {
// ...
}
// 경로에 해당하는 것이 디렉터리인지 여부
if (file.isDirectory) {
// ...
}
// 파일 또는 디렉터리에 이름을 반환
val name = file.name
// 경로에 파일 생성
file.createNewFile()
// 경로에 디렉터리 생성. 중간 경로가 없다면 중간 경로도 자동으로 생성
file.mkdirs()
// 삭제
file.delete()
// 절대 경로 반환
val path = file.absolutePath
파일을 읽고 쓰는 스트림
파일의 실제 데이터를 읽고 쓰려면 Stream 이라는 복잡한 클래스를 사용합니다. 바이트 단위 스트림은 InputStream / OutputStream 클래스를 사용하고 문자 단위 스트림은 Reader / Writer 클래스를 사용합니다.
텍스트 파일 읽기
val file = File(Path)
if(!file.exists())
return ""
val reader = FileReader(file)
val buffer = BufferedReader(reader)
var temp = ""
val result = StringBuffer()
while (true) {
temp = buffer.readLine()
if (temp == null)
break
else
result.append(buffer)
}
buffer.close()
var inputText = result.toString()
텍스트 파일 쓰기
val dir = File(directory)
if(!dir.exists()) {
dir.mkdirs()
}
val writer = FileWriter(directory + "/" + filename)
val buffer = BufferedWriter(writer)
buffer.write(content)
buffer.close()
댓글목록
등록된 댓글이 없습니다.