Android SD卡存储与内部存储

Android存储

Android系统分为内部存储和外部存储,内部存储是手机系统自带的存储,一般空间都比较小,外部存储一般是SD卡的存储,空间一般都比较大,但不一定可用或者剩余空间可能不足。一般我们存储内容都会放在外部存储空间里。

先判断SD卡是否可用,可用时优先使用SD卡的存储,不可用时用内部存储。
存储在SD卡上时,可以在SD卡上新建任意一个目录存放,也可以存放在应用程序内部文件夹,区别是在SD卡的任意目录存放时内容不会随应用程序的卸载而消失,而在应用程序内部的内容会随应用程序卸载消失。
一般缓存文件放在应用程序内部,用户主动保存的文件放在SD卡上的文件夹里。

存储路径 一般我们可以通过 Context 和 Environment 相关的方法获取文件存取的路径。

1.内部存储

1.1 根目录/data,通过 Environment.getDataDirectory() 获取。
1.2 应用程序目录r/data/包名(不一定,不同设备可能不同)
应用缓存目录:/cache,通过Context.getCacheDir()获取。
应用文件目录:/files,通过Context.getFilesDir()获取。Context.getFileStreamPath(String name)返回以name为文件名的子文件目录,若name为空,则返回文件根目录。假设我们的应用程序包名为com.pfj.demo,路径如下:

Environment.getDataDirectory():      /data
Context.getCacheDir():               /data/data/com.pfj.demo/cache
Context.getFilesDir():               /data/data/com.pfj.demo/files
Context.getFileStreamPath(""):       /data/data/com.pfj.demo/files
Context.getFileStreamPath("test"):   /data/data/com.pfj.demo/files/test

2.外部存储

2.1 根目录 /storage/emulated/0,通过 Environment.getExternalStorageDirectory() 获取。
2.2 应用程序目录/Andorid/data/包名
应用缓存目录/cache,通过Context.getExternalCacheDir()获取。
应用文件目录/files,通过Context.getExternalFilesDir(String type),type为空字符串时获取。type系统给我们提供了很多常用的类型:

public static String DIRECTORY_MUSIC = "Music";
public static String DIRECTORY_ALARMS = "Alarms";
public static String DIRECTORY_NOTIFICATIONS = "Notifications";
public static String DIRECTORY_PICTURES = "Pictures";
public static String DIRECTORY_MOVIES = "Movies";
public static String DIRECTORY_DOWNLOADS = "Download";
public static String DIRECTORY_DCIM = "DCIM";
public static String DIRECTORY_DOCUMENTS = "Documents";

假设我们的应用程序包名为com.pfj.demo,路径如下:

Environment.getExternalStorageDirectory():/storage/emulated/0
Context.getExternalCacheDir(): /storage/emulated/0/Android/data/com.pfj.demo/cache
Context.getExternalFilesDir(""):/storage/emulated/0/Android/data/com.pfj.demo/files
Context.getExternalFilesDir("test"):/storage/emulated/0/Android/data/com.pfj.demo/files/test
Context.getExternalFilesDir(Environment.DIRECTORY_PICTURES):
/storage/emulated/0/Android/data/com.pfj.demo/files/Pictures

2.3 公共存储目录:

我们可以在外部存储上新建任意文件夹,在6.0及之后的系统需要动态申请权限,这些目录的内容不会随着应用的卸载而消失。如:

Environment.getExternalStorageDirectory(): /storage/emulated/0
Environment.getExternalStoragePublicDirectory(""): /storage/emulated/0
Environment.getExternalStoragePublicDirectory("test"): /storage/emulated/0/test
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES)/storage/emulated/0/Pictures

参考链接

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值