728x90

안드로이드 기기에서 자료를 저장하는 방법은 크게 다음 4가지가 있다.  (온라인 전송은 논외이므로 제외)

1. 내부저장장치 InternalStorage
2. 외부저장장치 ExternalStorage
3. DB 저장 : SQLite
4. SharedPreferences

 

---------------------------------------------------------------------------------------------
1.안드로이드의 내부저장장치 (InternalStorage)

기본적으로 자바의 파일 입출력 스트림을 사용하며, openFileOutput()  과 openFileInput() 을 사용하여 안드로이드 내부 저장장치 에 파일을 생성하여 쓰고 읽기를 합니다.

 

참고: 외부 저장소 디렉터리와 달리 앱은 이러한 메서드에 의해 반환된 내부 디렉터리를 읽고 쓰는 데 시스템 권한이 필요하지 않습니다.

 

getFilesDir()앱의 내부 디렉터리를 나타내는 File을 반환합니다.

getCacheDir() 앱의 임시 캐시 파일의 내부 디렉터리를 나타내는 File을 반환합니다. 더 이상 필요하지 않은 파일을 모두 삭제하고 언제든지 사용할 수 있는 메모리 양에 관해 합리적인 크기 제한(예: 1MB)을 구현해야 합니다.

주의: 저장용량이 부족하면 시스템은 경고 없이 캐시 파일을 삭제할 수 있습니다.

 

 

Caution: On devices that run Android 7.0 (API level 24) or higher, unless you pass the Context.MODE_PRIVATE file mode into openFileOutput(), a SecurityException occurs.

 

openFileOutput() 메서드에는 파일 모드 매개변수가 필요합니다. MODE_PRIVATE을 전달하면 파일이 비공개로 앱에 전달됩니다. 다른 모드 옵션인 MODE_WORLD_READABLE  MODE_WORLD_WRITEABLE은 API 레벨 17부터 더 이상 사용되지 않습니다. Android 7.0(API 레벨 24)부터는 Android에서 이러한 옵션이 사용되면 SecurityException이 발생합니다. 앱이 다른 앱과 비공개 파일을 공유해야 한다면 FLAG_GRANT_READ_URI_PERMISSION 속성과 함께 FileProvider를 대신 사용해야 합니다. 자세한 내용은 파일 공유를 참조하세요.

Android 6.0(API 레벨 23) 이하에서는 누구든지 읽을 수 있도록 파일 모드(MODE_WORLD_READABLE)를 설정하면 다른 앱이 내부 파일을 읽을 수 있습니다. 하지만 다른 앱이 개발자 앱의 패키지 이름 및 파일 이름을 알아야 읽을 수 있습니다. 파일을 읽기 가능 또는 쓰기 가능으로 명시적으로 설정하지 않으면 다른 앱은 개발자 앱의 내부 디렉터리를 탐색할 수 없으며 읽기 또는 쓰기 권한도 갖지 못합니다. 따라서 내부 저장소의 파일에 MODE_PRIVATE을 사용하는 한 다른 앱이 이러한 파일에 액세스할 수 없습니다.

 

Reference

https://codedragon.tistory.com/353

https://bitsoul.tistory.com/tag/안드로이드저장장치 내부저장장치 InternalStorage openFileInput openFileOutput

https://developer.android.com/training/data-storage/files/internal?hl=ko

 

 

 

728x90

+ Recent posts