Android

안드로이드 저장소

산들바람아래서 2018. 12. 28. 16:22

안드로이드의 저장소는 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