안드로이드 저장소
안드로이드의 저장소는 2가지로 구분된다.
첫 번째는 내부 저장소로 이 공간은 해당 앱에서만 접근 가능하다. 유저도 이 공간에는 직접 접근할 수 없다.
두 번째는 외부저장소로 외부저장소는 공용영역과 고유영역으로 나뉘어진다.
외부저장소의 공용영역은 다양한 어플이 접근할 수 있는 영역이며 어플이 삭제되어도 이 경로에 저장된 데이터는 유지된다.
반면 외부저장소의 고유영역은 다른 어플도 접근 가능하며, 어플이 삭제시 이 공간의 데이터도 삭제된다.
보안을 위해서는 외부 어플이 접근할 수 없도록 내부저장소에 저장하는 것이 안전하며,
만약 내부 저장소에 저장된 데이터를 외부 어플로 전달하고 싶은 경우(email 첨부, 다른 어플로 열기)에는 fileprovider를 사용해야 한다.
내부 저장소
각 애플리케이션에서만 데이터를 읽고 쓸 수 있다.
캐시(Cache)
캐시 디렉터리에는 애플리케이션에서 필요한 임시 파일들이 저장됩니다.
File | Context.getCacheDir() |
| 내부 저장소의 캐시 디렉토리 경로를 반환합니다. |
내부 저장소의 캐시 디렉토리 경로는 다음과 같이 구성됩니다.
/data/data/[패키지 이름]/cache
만약 패키지 이름이 com.android.app 일 경우, 이 애플리케이션의 캐시 디렉터리 경로는 다음과 같습니다.
/data/data/com.android.app/cache
2. 데이터베이스(Database) 파일
애플리케이션에서 사용하는 데이터베이스 파일들이 저장됩니다.
File | Context.getDatabasePath(String name) |
| 데이터베이스 파일의 경로를 반환합니다. 인자로 데이터베이스 파일의 이름을 넘겨줍니다. |
데이터베이스 파일이 저장되는 경로는 다음과 같이 구성됩니다.
/data/data/[패키지이름]/databases
패키지 이름이 com.android.app 일 경우, 데이터베이스 파일은 다음 경로에 저장됩니다.
/data/data/com.android.app/databases
3. 일반파일 저장영역
데이터베이스와 캐시를 제외한 애플리케이션에서 사용하는 일반 파일이 저장되는 영역입니다. 이 경로는 Context.openFileOutput(String, int)를 사용하여 생성되는 파일이 저장되는 경로와 동일합니다.
File | Context.getFilesDir() |
| 애플리케이션에서 사용하는 일반 파일들이 저장되는 경로를 반환합니다. |
파일이 저장되는 경로는 다음과 같이 구성됩니다.
/data/data/[패키지 이름]/files
패키지 이름이 com.android.app 일 경우, 일반 파일은 다음 경로에 저장됩니다.
/data/data/com.android.app/files
애플리케이션에서 사용하는 각 일반 파일들의 경로를 가져오려면 다음 메서드를 사용합니다.
File | Context.getFilesStreamPath(String name) |
| 일반 파일이 저장된 공간에서 특정 이름을 가지는 파일의 경로를 반환합니다. 인자로 확장자를 포함한 파일 이름을 넘겨줍니다. |
파일의 경로는 다음과 같이 구성됩니다.
/data/data/[패키지 이름]/files/[파일 이름]
패키지 이름이 com.android.app 이고 test.txt일 경우, 파일의 경로는 다음과 같습니다.
/data/data/android.app/files/test.txt
외부 저장소 – 공용 영역
최상위 경로 얻기
외부 저장소(일반적으로 SD카드)의 최상위 경로를 의미합니다.
static | File | Environment.getExternalStorageDirectory() |
|
| 외부 저장소의 최상위 경로를 반환합니다 |
2.2(Froyo) 이상을 기준으로 반환되는 최상위 경로는 일반적으로 다음과 같습니다.
/mnt/sdcard
2. 특정 데이터를 저장하는 영역
여러 애플리케이에서 공용으로 사용할 수 있는 데이터를 저장합니다. 데이터의 유형에 따라 별도의 디렉터리를 사용합니다.
static | File | Environment.getExternalStoragePublicDirectory(String type) |
|
| 데이터 유형에 따른 외부 저장소의 저장 공간 경로를 반환합니다. 인자로 디렉터리의 유형을 넘겨줍니다. |
안드로이드에서는 총 7개 데이터 유형에 대한 표준 저장 경로를 제공합니다. Environment.getExternalStoragePublicDirectory()의 인자로 넘겨줄 수 있는 인자 및 각 인자의 경로는 다음과 같습니다.
인자명 | 설명 | 경로 |
Environment.DIRECTORY_ALARMS | 알람으로 사용할 오디오 파일을 저장합니다. | /mnt/sdcard/Alarms |
Environment.DIRECTORY_DCIM | 카메라로 촬영한 사진이 저장됩니다. | /mnt/sdcard/DCIM |
Environment.DIRECTORY_DOWNLOADS | 다운로드한 파일이 저장됩니다. | /mnt/sdcard/Download |
Environment.DIRECTORY_MUSIC | 음악파일이 저장됩니다. | /mnt/sdcard/Music |
Environment.DIRECTORY_MOVIES | 영상파일이 저장됩니다. | /mnt/sdcard/Movies |
Environment.DIRECTORY_NOTIFICATIONS | 알림음으로 사용할 오디오 파일을 저장합니다. | /mnt/sdcard/Notifications |
Environment.DIRECTORY_PICTURES | 그림 파일이 저장됩니다. | /mnt/sdcard/Pictures |
Environment.DIRECTORY_PODCASTS | 팟캐스트(Podcast)파일이 저장됩니다. | /mnt/sdcard/Podcasts |
※ 이 영역에 데이터를 저장하기 전에, 해당 디렉터리가 존재하는지 필히 확인해야 합니다. 이를 확인하기 위해 File.mkdirs()를 사용하여 디렉터리가 없을 경우 새 디렉터리를 생성합니다. 디렉터리가 존재하지 않을 경우 FileNotFoundException이 발생합니다.
외부 저장소-애플리케이션 고유 영역
특정 데이터를 저장하는 영역
애플리케이션 고유 영역에도 공용 영역과 마찬가지로 각 데이터 유형별로 데이터를 저장하는 표준 디렉터리를 제공합니다.
File | Context.getExternalFilesDir(String type) |
| 애플리케이션 고유 영역의 데이터 유형에 따른 외부 저장소의 저장 공간 경로를 반환합니다. 인자로 디렉터리의 유형을 넘겨줍니다. |
각 경로의 역할은 공용 영역과 동일합니다.
인자명 | 설명 | 경로 |
Environment.DIRECTORY_ALARMS | 알람으로 사용할 오디오 파일을 저장합니다. | /mnt/sdcard/Android/data/[패키지 이름]/files/Alarms |
Environment.DIRECTORY_DCIM | 카메라로 촬영한 사진이 저장됩니다. | /mnt/sdcard/Android/data/[패키지 이름]/files/DCIM |
Environment.DIRECTORY_DOWNLOADS | 다운로드한 파일이 저장됩니다. | /mnt/sdcard/Android/data/[패키지 이름]/files/Download |
Environment.DIRECTORY_MUSIC | 음악파일이 저장됩니다. | /mnt/sdcard/Android/data/[패키지 이름]/files/Music |
Environment.DIRECTORY_MOVIES | 영상파일이 저장됩니다. | /mnt/sdcard/Android/data/[패키지 이름]/files/Movies |
Environment.DIRECTORY_NOTIFICATIONS | 알림음으로 사용할 오디오 파일을 저장합니다. | /mnt/sdcard/Android/data/[패키지 이름]/files/Notifications |
Environment.DIRECTORY_PICTURES | 그림 파일이 저장됩니다. | /mnt/sdcard/Android/data/[패키지 이름]/files/Pictures |
Environment.DIRECTORY_PODCASTS | 팟캐스트(Podcast)파일이 저장됩니다. | /mnt/sdcard/Android/data/[패키지 이름]/files/Podcasts |
null |
| /mnt/sdcard/Android/data/[패키지 이름]/files |
2. 캐시 데이터를 저장하는 영역
애플리케이션에서 사용하는 임시 데이터를 외부 저장소에 저장합니다
File | Context.getExternalCacheDir(String type) |
| 외부 저장소의 캐시 디렉터리를 반환합니다. |
외부 저장소의 캐시 저장 경로는 일반적으로 다음과 같이 구성됩니다.
/mnt/sdcard/Android/data/[패키지 이름]/cache
패키지 이름이 com.android.app 일 경우, 캐시 저장 경로는 다음과 같습니다.
/mnt/sdcard/Android/data/com.android/app/cache
출처: http://androidhuman.tistory.com/432