Android 파일 저장 소 분석

내부 저장 소
내부 저장,data/data/패키지 이름/경로 에 있 습 니 다.
사용자 권한 필요 여부:여부
다른 응용 프로그램 에 접근 할 수 있 는 지 여부:여부
마 운 트 해제 데이터 삭제 여부:예
내부 저장 컨트롤 은 사용자 권한 이 필요 하지 않 습 니 다.이것 은 사용자 가 아래 의 권한 을 부여 할 필요 가 없다 는 것 을 의미 합 니 다.
android.permission.WRITE_EXTERNAL_STORAGE
android.permission.READ_EXTERNAL_STORAGE
장치 에 설 치 된 모든 App 에 대해 시스템 은 data/data 디 렉 터 리 에서 프로그램 패키지 이름 으로 해당 하 는 폴 더 를 자동 으로 만 들 고 이 디 렉 터 리 에 있 는 파일 을 직접 읽 을 수 있 습 니 다.또한 이 디 렉 터 리 에 있 는 파일 은 다른 응용 프로그램 에 접근 할 수 없습니다.이것 은 우리 가 내부 에 저 장 된 파일 의 안전성 과 프라이버시 를 보장 합 니 다.만약 에 우리 가 내부 에 저 장 된 파일 을 볼 필요 가 있다 면 우 리 는 Android Studio 의 Device File Explore 도 구 를 통 해 접근 할 수 있 습 니 다.


이 를 통 해 해당 하 는 저장 파일 을 볼 수 있 습 니 다.
/data/data/응용 명/cache:APP 의 캐 시 정 보 를 저장 합 니 다.
/data/data/응용 명/codecache:실행 할 때 응용 프로그램 에 의 한 컴 파일 이나 최적화 된 코드 를 저장 합 니 다.
/data/data/응용 명/files:앱 의 파일 정보 저장
Shared Preference 가 만 든/data/응용 패키지 이름/shared 를 호출 하 는 등 실 행 될 때 만 든 폴 더 도 있 습 니 다.prefs 디 렉 터 리,app 의 Shared Preference 가 만 든 xml 파일 을 저장 하고 데이터 베 이 스 를 호출 하여 만 든**/data/data/응용 패키지 이름/databases/*폴 더 를 저장 합 니 다.여 기 는 일일이 예 를 들 지 않 습 니 다.
기술적 으로 내부 저장 파일 을 만 들 때 파일 속성 을 읽 을 수 있 도록 설정 하면 다른 app 은 자신 이 사용 하 는 데 이 터 를 방문 할 수 있 습 니 다.전 제 는 그 가 이 응용 프로그램의 가방 이름 을 알 고 있다 는 것 입 니 다.만약 에 파일 의 속성 이 개인(private)이 라면 가방 이름 을 알 고 다른 응용 프로그램 에 접근 할 수 없습니다.내부 저장 공간 이 매우 제한 되 어 있어 소중 하 다.또한 시스템 자체 와 시스템 응용 프로그램의 주요 한 데이터 저장 장소 이기 도 하고 내부 저장 공간 이 다 소모 되면 핸드폰 도 사용 할 수 없다.그래서 내부 저장 공간 에 대해 우 리 는 가능 한 한 사용 을 피해 야 한다.Shared Preferences 와 SQLite 데이터 베 이 스 는 모두 내부 저장 공간 에 저 장 됩 니 다.내부 저장 소 는 일반적으로 Context 로 가 져 오고 조작 합 니 다.
내부 저장 소 에 접근 하 는 API 방법:
1.getFilesDir().getAbsolutePath() :/data/user/0/com.example.myapplication/files
2.getCacheDir().getAbsolutePath() :/storage/emulated/0/Android/data/com.example.myapplication/cache
3.getDir(“myFile”, MODE_PRIVATE).getAbsolutePath() :/data/user/0/com.example.myapplication/app_myfile
4.getCodeCacheDir().getAbsolutePath() : /data/user/0/com.example.myapplication/code_cache,Android 5.0+요구
외부 저장 소
개념:가장 헷 갈 리 는 것 은 외부 저장 소 입 니 다.오래된 안 드 로 이 드 시스템 은 새로운 안 드 로 이 드 시스템 과 차이 가 있 기 때문에 많은 사람들 이 인터넷 에서 자 료 를 찾 아 예전 의 자 료 를 보고 현재 의 자 료 를 보 았 습 니 다.그러나 그들의 주장 이 다르다 는 것 을 발견 하고 곤 혹 스 러 웠 습 니 다.
먼저"pc 기기 에서 외부 저장 과 내부 저장 을 구분 하 는 것 이 라면 컴퓨터 가 자체 적 으로 가지 고 있 는 하 드 디스크 는 내부 저장 이 고 U 디스크 나 모 바 일 하 드 디스크 는 외부 저장 이다"는 보편적 인 개념 을 말한다.그래서 많은 사람들 이 이러한 이 해 를 가지 고 안 드 로 이 드 휴대 전 화 를 바라 보고 내장 저장 소(기체 저장 소)를 내부 저장 소 로 하고 확 장 된 SD 카드 를 외부 저장 소로 여 긴 다.
그렇다 고 생각 하 는 것 은 맞다.4.4(API 19)이전 휴대 전화 에 서 는 그 랬 기 때문이다.휴대 전화 자체 가 가지 고 있 는 메모리 카드 는 내부 저장 이 고 확 장 된 SD 카드 는 외부 저장 이기 때문이다.
그러나 4.4 의 시스템 부터 많은 중고 급 기계 들 이 자신의 기체 저장 소 를 8G 이상으로 확대 했다.예 를 들 어 어떤 사람의 휴대 전 화 는 16G 이 고 어떤 사람의 휴대 전 화 는 32G 이다.그러나 이 16G,32G 는 내부 저장 소 입 니까?아 닙 니 다.그들 은 여전히 외부 저장 소 입 니 다.
4.4 시스템 및 그 이상 의 휴대 전 화 는 기체 저장(휴대 전화 자체 테이프 의 저장 을 기체 저장 이 라 고 함)을 개념 적 으로'내부 저장 internal'과'외부 저장 external'두 부분 으로 나 눈 것 이다.16G,32G 가 외부 메모리 인 만큼 또 의문 이 생 긴 다.4.4 시스템 및 그 이상 의 휴대 전화 가 SD 카드 를 꽂 으 면 SD 카드 는 무엇 일 까?SD 카드 도 외부 메모리 라면 기체 에 저 장 된 외부 메모리 와 SD 카드 의 외부 저장 소 를 어떻게 구분 할 것 인가?
네,SD 카드 도 외부 저장 소 입 니 다.어떻게 구분 합 니까?4.4 이후 시스템 에서 API 는 이러한 방법 으로 핸드폰 의 외부 저장 경 로 를 옮 겨 다 니 는 방법 을 제공 합 니 다.

File[] files;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
    files = getExternalFilesDirs(Environment.MEDIA_MOUNTED);
    for(File file:files){
        Log.e("main",file);
    }
}
만약 당신 의 휴대 전화 에 SD 카드 를 꽂 았 다 면,그것 의 인쇄 경 로 는 두 가지 가 있 습 니 다.예 를 들 어 나의 화 웨 이 영광 7 에 SD 카드 를 꽂 았 습 니 다.그 결 과 는 다음 과 같 습 니 다.
/storage/emulated/0/Android/data/packname/files/mounted
/storage/B3E4-1711/Android/data/packname/files/mounted
그 중에서/storage/emulated/0 디 렉 터 리 는 기체 에 저 장 된 외부 저장 경로 이 고/storage/B3E4-1711/은 SD 카드 의 경로 이 며 그들 은 외부 저장 이 라 고 통칭 한다.
일반적으로 외부 저장 소 는 외부 공유 와 외부 사유 로 나 눌 수 있다.
2.1 외부 공유
사용자 권한 이 필요 한 지 여부:예
다른 응용 프로그램 에 접근 할 수 있 습 니까?
마 운 트 해제 데이터 삭제 여부:여부
공공 디 렉 터 리 는 읽 기와 쓰기 권한 을 부여 해 야 합 니 다.이것 은 우리 가AndroidManifest.xml에 사용자 권한 을 등록 해 야 한 다 는 것 을 의미 합 니 다.

<!--            -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
또한 Android 6.0 시스템 이후 사용자 권한 을 신청 하고 사용자 권한 을 받 아야 파일 을 읽 고 쓸 수 있 습 니 다.
공용 디 렉 터 리 가 상대 적 으로 열 려 있어 공용 디 렉 터 리 에 있 는 다른 앱 에 접근 할 수 있 으 며,앱 이 삭 제 될 때 공용 디 렉 터 리 에 있 는 앱 의 파일 을 삭제 하지 않 습 니 다.
우 리 는 Environment 대상 을 통 해 공공 디 렉 터 리 를 읽 고 쓰 는 파일 에 접근 할 수 있 습 니 다.
외부 저장 소 를 읽 고 쓸 때 는 외부 저장 상태 가 읽 기와 쓰 기 를 지원 할 수 있 는 지 판단 해 야 한다.

Environment.getExternalStorageState() 
/**       {@link #MEDIA_UNKNOWN}, {@link #MEDIA_REMOVED},
 *        {@link #MEDIA_UNMOUNTED}, {@link #MEDIA_CHECKING},
 *        {@link #MEDIA_NOFS}, {@link #MEDIA_MOUNTED},
 *        {@link #MEDIA_MOUNTED_READ_ONLY}, {@link #MEDIA_SHARED},
 *        {@link #MEDIA_BAD_REMOVAL}, or {@link #MEDIA_UNMOUNTABLE}
 */
반환 값 만 MEDIAMOUNTED 는 현재 정상적으로 읽 고 쓸 수 있다 고 밝 혔 다.
다음은 관련 API 를 살 펴 보 겠 습 니 다.
1. Environment.getExternalStorageDirectory() : /storage/emulated/0
2. Environment.getExternalStoragePublicDirectory(String type)  
Environment.getExternalStoragePublicDirectory(DIRECTORY_DOCUMENTS).getAbsolutePath()  : /storage/emulated/0/Documents
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MUSIC).getAbsolutePath() : /storage/emulated/0/Music
2.2 외부 사유
사용자 권한 필요 여부:4.4 이상 필요 없 음
다른 응용 프로그램 에 접근 할 수 있 는 지 여부:여부
마 운 트 해제 데이터 삭제 여부:예
개인 디 렉 터 리 는 Android 4.4 시스템 이상 입 니 다.외부 개인 저장 소 에 등록 하거나 권한 을 부여 하지 않 아 도 외부 개인 에서 파일 을 읽 고 쓸 수 있 습 니 다.또한 파일 은 다른 응용 프로그램 에 접근 할 수 없고 프라이버시 와 안전성 이 좋 으 며 사용자 가 삭제 할 때 해당 하 는 응용 개인 디 렉 터 리 도 삭 제 됩 니 다.
개인 디 렉 터 리 주소:/storage/emulated/0/android/data/응용 패키지 이름
관련 API 는 다음 과 같 습 니 다.
getExternalCacheDir().getAbsolutePath()  // /storage/emulated/0/Android/data/com.example.myapplication/cache
getExternalFilesDir("mytest").getAbsolutePath() // /storage/emulated/0/Android/data/com.example.myapplication/files/mytest
getExternalFilesDir(null).getAbsolutePath()  // /storage/emulated/0/Android/data/com.example.myapplication/files
이상 은 안 드 로 이 드 파일 저장 의 상세 한 내용 을 분석 하 는 것 입 니 다.안 드 로 이 드 파일 저장 에 관 한 자 료 는 다른 관련 글 을 주목 하 세 요!

좋은 웹페이지 즐겨찾기