안드로이드 파일 저장소 - 내부 저장소와 외부 저장소
3827 단어 안드로이드 학습 노트
내부 저장 개념: 내부 저장은 메모리가 아니므로 주의하세요.내부 저장소는 시스템에서 매우 특수한 위치에 있습니다. 만약 파일을 내부 저장소에 저장하고 싶다면, 파일은 기본적으로 응용 프로그램에만 접근할 수 있고, 한 응용 프로그램이 만든 모든 파일은 응용 프로그램 패키지 이름과 같은 디렉터리에 있습니다.즉, 응용 프로그램이 내부에 저장된 파일을 만드는 것은 이 응용 프로그램과 관련이 있다는 것이다.응용 프로그램이 마운트 해제되면 내부 저장소의 파일도 삭제됩니다.기술적으로 만약에 내부 저장 파일을 만들 때 파일 속성을 읽을 수 있도록 설정하면 다른 앱은 자신이 응용한 데이터에 접근할 수 있다. 전제는 그가 이 응용 프로그램의 패키지 이름을 알고 있다는 것이다. 만약에 파일의 속성이 개인 (private)이라면 패키지 이름을 알고 다른 응용 프로그램도 접근할 수 없다.내부 저장 공간이 매우 제한되어 비싸 보인다. 또한 시스템 자체와 시스템 응용 프로그램의 주요 데이터 저장 장소이기도 하기 때문에 내부 저장 공간이 다 소모되면 휴대전화도 사용할 수 없다.따라서 내부 저장 공간에 대해 우리는 가능한 한 사용을 피해야 한다.Shared Preferences와 SQLite 데이터베이스는 모두 내부 저장 공간에 저장됩니다.외부 저장 개념: 가장 헷갈리는 것은 외부 저장이다. 낡은 안드로이드 시스템은 새로운 안드로이드 시스템과 차이가 있기 때문에 많은 사람들이 인터넷에서 자료를 찾고 예전의 자료를 보고 현재의 자료를 봤지만 그들의 견해가 다르다는 것을 발견하고 곤혹스러워한다.먼저'pc에서 외부 저장과 내부 저장을 구분한다면 컴퓨터가 자체로 가지고 있는 하드디스크는 내부 저장이고 U디스크나 이동 하드디스크는 외부 저장이다'는 보편적인 개념을 말한다.그래서 많은 사람들이 이러한 이해를 가지고 안드로이드 휴대전화를 바라보며 내장 메모리(기체 메모리)를 내부 메모리로 하고 확장된 SD카드를 외부 메모리로 여긴다.4.4(API19) 이전의 휴대전화에서 확실히 이랬기 때문에 휴대전화 자체가 가지고 있는 메모리 카드는 내부 메모리이고 확장된 SD카드는 외부 메모리이기 때문이다.그러나 4.4 시스템부터 많은 중첨단 기기들이 자신의 기체 저장을 8G 이상으로 확대했다. 예를 들어 어떤 사람의 휴대전화는 16G이고 어떤 사람의 휴대전화는 32G인데 이 16G, 32G는 내부 저장장치인가!!!그것들은 여전히 외부 저장소이다. 즉, 4.4시스템과 이상의 휴대전화는 기체 저장소(휴대전화 자체가 가지고 있는 저장소를 기체 저장소라고 부른다)를 개념적으로'내부 저장소 인터넷'과'외부 저장소 external'두 부분으로 나눈다.16G, 32G가 외부 저장소인 이상 의문이 생겼다. 4.4시스템 및 이상의 휴대전화에 SD카드를 꽂았더라면 SD카드는 무엇이었을까. 만약에 SD카드도 외부 저장소였다면 기체가 저장한 외부 저장소와 SD카드의 외부 저장소를 어떻게 구분했을까?맞아요. SD카드도 외부 저장소인데 어떻게 구분하죠? 4.4 이후 시스템에서 API는 이런 방법을 제공하여 휴대전화의 외부 저장소 경로를 두루 훑어보았습니다.
File[] files = getExternalFilesDirs(Environment.MEDIA_MOUNTED);
만약 네 휴대전화에SD카드를 꽂았다면, 인쇄하는 경로가 두 개일 것이다.
2. 내부 저장 경로와 외부 저장 경로에서 얻는api
내부 스토리지 경로 검색
Context.getFilesDir() = /data/data/packagename/files( /data/user/0/packagename/files)
Context.getCacheDir() = /data/data/packagename/cache( /data/user/0/packagename/cache)
외부 스토리지 경로 가져오기
Context.getExternalFilesDir() = /mnt/sdcard/Android/data/packagename/files( /storage/emulated/0/Android/data/packagename/files)
Context.getExternalCacheDir() = /mnt/sdcard/Android/data/packagename/cache( /storage/emulated/0/Android/data/packagename/cache)
3. 실제 응용
응용 프로그램이 실행되는 과정에서 만약 휴대전화에 데이터를 저장해야 한다면 일반적으로 데이터를SD카드에 저장한다.대부분의 응용 프로그램은 SD카드의 루트 디렉터리에 직접 폴더를 만들고 데이터를 이 폴더에 저장합니다.이렇게 하면 이 앱이 마운트 해제된 후에도 이 데이터는 SD카드에 남아 스팸 데이터를 남긴다.만약 당신의 응용 프로그램이 마운트 해제된 후에 이 응용 프로그램과 관련된 데이터도 지우고 싶다면 어떻게 해야 합니까?Context.getExternal FilesDir () 방법은 "/mnt/sdcard/Android/data/패키지 이름/files"디렉터리에 저장된 데이터를 저장할 수 있습니다.Context.getExternal CacheDir () 방법은 "/mnt/sdcard/Android/data/패키지 이름/cache"디렉터리에 임시 캐시 데이터를 저장할 수 있습니다.위의 방법을 사용하면 사용자가 마운트 해제한 후에 '/mnt/sdcard/Android/data/패키지 이름/' 이 디렉터리에 있는 모든 파일이 삭제되고 스팸메일이 남지 않습니다.그리고 위의 두 디렉터리는 각각 설정->적용->적용 상세 정보에 있는'데이터 지우기'와'캐시 지우기'옵션에 대응합니다. 다운로드한 내용을 저장하려면 위 디렉터리에 두지 마십시오. 실제 응용 프로그램에서는 캐시 주소를 얻는 방법을 따로 씁니다. 아래와 같습니다.
public String getCacheDir(Context context) {
String cachePath;
if (Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())
|| !Environment.isExternalStorageRemovable()) {
cachePath = context.getExternalCacheDir().getPath();
} else {
cachePath = context.getCacheDir().getPath();
}
return cachePath;
}
SD카드가 존재하거나 SD카드가 제거될 수 없을 때 getExternal CacheDir () 방법을 사용해서 외부 저장소가 내 캐시 경로임을 가져오고, 그렇지 않으면 getCacheDir () 방법을 사용해서 내부 저장소의 캐시 경로를 가져오는 것을 볼 수 있습니다.주의: 이 두 가지 방식의 캐시는 모두 앱을 마운트 해제할 때 시스템에서 정리되며 개발자가 sd카드에 만든 캐시 폴더는 앱을 마운트 해제함에 따라 삭제되지 않습니다.
참고 문장
1. 안드로이드 파일 저장소 - 내부 저장소, 외부 저장소 및 각종 저장 경로의 의혹을 철저히 이해한다.getCacheDir(), getFilesDir(), getExternalFilesDir(), getExternalCacheDir()의 역할
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
java 반사 메커니즘 문맹 퇴치반사 메커니즘은 운행 상태에서 임의의 클래스에 대해 이 클래스의 모든 속성과 방법을 알 수 있다.임의의 대상에 대해 임의의 방법과 속성을 호출할 수 있다.이런 동적으로 얻은 정보와 동적 호출 대상의 방법의 기능을 자...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.