Explicação detalhada do armazenamento interno e armazenamento externo (diretório público, diretório privado, diretório de cache) no sistema Android

Primeiro de tudo, para esclarecer um conceito, armazenamento interno e armazenamento externo Android não são chamados de memória interna do telefone móvel é armazenamento interno, cartão SD é nuvem de armazenamento externo.
O Android não distingue fisicamente entre armazenamento interno e armazenamento externo, mas logicamente.

1. Conceito

sistema de armazenamento interno refere-se ao espaço de armazenamento interno, logicamente distinguido por um arquivo de diretório na palavra de dados é o diretório interposta
tem informações diretório app apk, além de sistema de armazenamento de dados para o diretório de download, não são armazenados vários arquivos do diretório de dados
exemplo:
Os arquivos armazenados por sharedPreferenced estão no diretório / data / data // shared_prefs /.
Os arquivos armazenados pelo Sqlite estão no diretório / data / data // database /.

O armazenamento externo é muito mais simples
1. Os fabricantes de celulares trazem seu próprio armazenamento, que costuma ser de 16 GB, 64 GB etc.
2. Cartão SD
Estes são armazenamento externo

Segundo, obtenha o diretório de armazenamento interno operável (exclua conforme o usuário exclui o aplicativo)

getCacheDir().getPath():内部缓存目录

/data/user/0/packname/cache/      //7.0以上
/data/data/packname/cache/



getFilesDir().getPath():内部文件目录

/data/user/0/packname/files/
/data/data/packname/files/

As pastas shared_prefs e database têm ferramentas especializadas, como sharedPreferenced e Sqlite, para operar.

Nota: A diferença entre dados / dados / ... e dados / usuário / 0 / ... é que este último distingue usuários, mas isso não é importante

3. Obtenha o diretório de armazenamento externo operável

O armazenamento externo é dividido em diretório público externo, diretório privado externo e diretório de cache:

1. Nove diretórios públicos externos:

Environment.getExternalStoragePublicDirectory(context,type);

/storage/emulate/0/....

有九种type,分别对应不同的目录,如下

DIRECTORY_MUSIC:音乐类型    /storage/emulate/0/music
DIRECTORY_PICTURES:图片类型
DIRECTORY_MOVIES:电影类型
DIRECTORY_DCIM:照片类型,相机拍摄的照片视频都在这个目录(digital camera in memory) 
DIRECTORY_DOWNLOADS:下载文件类型   /storage/emulate/0/downloads
DIRECTORY_DOCUMENTS:文档类型
DIRECTORY_RINGTONES:铃声类型
DIRECTORY_ALARMS:闹钟提示音类型
DIRECTORY_NOTIFICATIONS:通知提示音类型

2. Diretório privado externo (excluído quando o usuário exclui o aplicativo)

getExternalFilesDir(type)

/storage/emulated/0/Android/data/packagename/files/

3. Diretório de cache externo (excluído quando o usuário exclui o aplicativo)

getExternalCacheDir()

/storage/emulated/0/Android/data/packname/cache/

4. Diretório raiz externo

Environment.getExternalStorageDirectory()

/storage/emulated/0
Caminho Nome do método Pertencem a
/ data / data / <包 名> / arquivos getFilesDir () Dentro
/ data / data / <包 名> / cache getCacheDir () Dentro
/ data / data / <包 名> / app_ getDir () Dentro
/ storage / emulado / 0 Environment.getExternalStorageDirectory () Raiz externa
/ storage / emulado / 0 / Environment.getExternalStoragePublicDirectory (type) Nove diretórios públicos externos
/ storage / emulado / 0 / Android / data / <包 名> / files / getExternalFilesDir (type) Diretório privado externo
/ storage / emulado / 0 / Android / data / <包 名> / cache getExternalCacheDir () Diretório de cache externo

Nota: Não importa externo ou interno, desde que exista um nome de pacote no caminho, ele seja particular e os usuários precisem de acesso root. Os métodos para obter o caminho são todos chamados pelo Contexto e são destruídos quando o usuário exclui o aplicativo.Os caminhos sem o nome do pacote são chamados pelo Ambiente.

Nota:
Análise de caminho e diretório correspondente do FileProvider:

O caminho raiz corresponde a DEVICE_ROOT, que é o arquivo DEVICE_ROOT = new File ("/"), que é o diretório raiz, e geralmente não precisa ser configurado.
files-path corresponde ao diretório interno do arquivo obtido por getFilesDir ().
O caminho do cache corresponde ao diretório de cache interno obtido por getCacheDir ().
caminho externo corresponde ao diretório raiz externo apontado por Environment.getExternalStorageDirectory ().
caminho dos arquivos externos corresponde ao diretório privado externo obtido por ContextCompat.getExternalFilesDirs ().
external-cache-path corresponde ao diretório de cache externo obtido por ContextCompat.getExternalCacheDirs ().

Publicado 60 artigos originais · 25 elogios · 10.000+ visualizações

Acho que você gosta

Origin blog.csdn.net/qq_41466437/article/details/104970199
Recomendado
Clasificación