Android设备中的内部存储和外部存储

作者:华清远见讲师

所有的Android设备均有两个文件存储区域:"internal" 与 "external" 。 这两个名称来自于早先的Android系统,当时大多设备都内置了不可变的内存(internal storage)及一个类似于SD card(external storage)这样的可卸载的存储部件。之后有一些设备将"internal" 与 "external" 都做成了不可卸载的内置存储,虽然如此,但是这一整块还是从逻辑上有被划分为"internal"与"external"的。只是现在不再以是否可卸载进行区分了。 下面列出了两者的区别:

本文引用地址:http://www.embedu.org/Column/7559.html

Internal storage:

1.总是可用的

2.这里的文件默认只能被我们的app所访问。

3.当用户卸载app的时候,系统会把internal内该app相关的文件都清除干净。

4.Internal是我们在想确保不被用户与其他app所访问的最佳存储区域。

External storage:

1.并不总是可用的,因为用户有时会通过USB存储模式挂载外部存储器,当取下挂载的这部分后,就无法对其进行访问了。

2.是大家都可以访问的,因此保存在这里的文件可能被其他程序访问。

3.当用户卸载我们的app时,系统仅仅会删除external根目录(getExternalFilesDir())下的相关文件。

4.External是在不需要严格的访问权限并且希望这些文件能够被其他app所共享或者是允许用户通过电脑访问时的最佳存储区域。

保存文件到External storage:

为了写数据到external storage, 必须在你manifest文件中请求WRITE_EXTERNAL_STORAGE权限:

...

因为external storage可能是不可用的,比如遇到SD卡被拔出等情况时。因此在访问之前应对其可用性进行检查。我们可以通过执行 getExternalStorageState()来查询external storage的状态。若返回状态为MEDIA_MOUNTED, 则可以读写。

保存文件到Internal storage:

保存文件到internal storage时,可以通过执行下面两个方法之一来获取合适的目录作为 FILE 的对象:

getFilesDir() : 返回一个File,代表了我们app的internal目录。

getCacheDir() : 返回一个File,代表了我们app的internal缓存目录。请确保这个目录下的文件能够在一旦不再需要的时候马上被删除,并对其大小进行合理限制,例如1MB 。系统的内部存储空间不够时,会自行选择删除缓存文件。

同样可以使用File() 构造器在那些目录下创建一个新的文件,如下:

File file = new File(context.getFilesDir(), filename);

之后我们就可以通过IO流对文件进行读写操作了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值