728x90
파일 입출력
안드로이드 저장소
안드로이드는 파일 데이터를 저장할 수 있는 저장소를 내부저장소, 외부 저장소 두 가지로 구분한다.
일반적으로 내부 저장소는 안드로이드 기기 자체에서 제공하는 비휘발성 내부 메모리를 말하고 외부 저장소는 마이크로 SD카드와 같은 이동식 저장소를 말한다.
-
내부 저장소
-
외부 저장소
내부 저장소 (internal storage) | 외부 저장소 (external storage) |
애플리케이션을 통해서만 접근이 가능 | 단말기 내부의 공유 영역으로 모든 애플리케이션이 접근 가능 |
애플리케이션이 삭제되면 저장소도 같이 삭제 | 애플리케이션이 삭제되어도 저장소는 삭제되지 않음 |
사용자와 다른 앱이 자신의 파일에 액세스하는 것을 원치 않을 경우 적합 | 액세스가 제한이 필요하지 않거나 다른 앱과 공유하고 싶은 파일을 다룰 때 적합 |
openFileoutput, openFileInput으로 접근 | FileInputStream, FileOutputStream으로 접근 |
내부 저장소 파일 입출력
//파일 저장//
var output = openFileOutput("파일이름", Context.MODE_PRIVATE) //MODE_APPEND : 뒤에 추가, MODE_PRIVATE : 덮어쓰기
var dos = DataOutputStream(output)
dos.writeInt(123) //정수형 type
dos.writeDouble(12.34) //실수형 type
dos.writeUTF("안녕하세요") //문자형 type
dos.flush()
dos.close()
Open할 형태
- MODE_APPEND : 뒤에 추가
- MODE_PRIVATE : 덮어쓰기
flush는 stream에 남아 잇는 데이터를 강제로 내보내는 역할이다. 그래서 close()하기 전에 해주는 것이 좋다.
//파일 읽기//
var input = openFileInput("파일이름")
var dis = DataInputStream(input)
var valueInt = dis.readInt() //정수형 type
var valueDouble = dis.readDouble() //실수형 type
var valueUTF = dis.readUTF() //문자형 type
dis.close() //종료
//이후 valueInt, valueDouble, valueUTF 출력할 수 있다.
외부 저장소 파일 입출력
외부 저장소를 접근하기 위해서는 권한이 필요하다.
AndroidManifest.xml에 다음과 같은 권한을 추가해준다.
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<!--파일을 읽고 쓰기 위해 권한을 추가, 외부저장소를 사용할떄 필요-->
권한 확인작업을 해줘야한다.
//권한 리스트
var permission_list = arrayOf(
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE
)
//권한 체크
fun PermissionCheck(){
if(Build.VERSION.SDK_INT < Build.VERSION_CODES.M){
return
}
for(permission : String in permission_list){
var chk = checkCallingOrSelfPermission(permission)
if(chk == PackageManager.PERMISSION_DENIED){
requestPermissions(permission_list, 0)
break
}
}
}
var path : String? = null //파일 경로
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
path = Environment.getExternalStorageDiretory().absolutePath + "/android/data/" + packageName
var file = FIle(path)
if(file.exist() == false){
file.mkdir()
}
}
Environment.getExternalStorageDiretory().absolutePath // 외부 저장소까지의 경로를 얻어올 수 있다.
path에 파일을 저장할 경로를 만들어 주었다.
//파일 저장//
var output = FileOutputStream(path + "/sdkfile")
var dos = DataOutputStream(output)
dos.writeUTF("확인")
dos.flush()
dos.close()
flush는 stream에 남아 잇는 데이터를 강제로 내보내는 역할이다. 그래서 close()하기 전에 해주는 것이 좋다.
//파일 읽기
var input = FileInputStream(path + "/sdkfile")
var dis = DataInputStream(input)
var valueUTF = dis.readUTF()
dis.close()
//이후 파일 출력
정리
안드로이드는 외부 저장소와 내부 저장소를 제공하고 있다.
외부 저장소 및 내부 저장소 모두 파일 입출력이 가능하다.
참고
www.youtube.com/watch?v=qRVE566kXzc&t=1031s
728x90
'안드로이드(android)' 카테고리의 다른 글
Android(Kotlin) / 네이버 지도 현재 위치 (0) | 2021.04.06 |
---|---|
안드로이드(android) / 에러 무한 로딩 'waiting for target device to com online' (0) | 2021.03.09 |
Android(Kotlin) / 네이버지도 띄우기 (0) | 2021.01.28 |
Android(Kotlin) / 현재위치 txt 파일로 저장 (0) | 2021.01.28 |
댓글