Android 访问存储卡的三种主要的目录

Android 访问存储卡(即外部存储)通常涉及以下三种主要的目录:

1. 外部存储公共目录 (Public External Storage)

这些目录对所有应用都是可见的,并且不需要任何特殊权限来读取媒体文件。但是从Android 10(API 级别 29)开始,如果要写入这些目录,则需要WRITE_EXTERNAL_STORAGE权限,并且访问路径可能受到某些限制。

  • 获取方法:使用Environment.getExternalStoragePublicDirectory()方法,传入一个类型参数如Environment.DIRECTORY_PICTURESEnvironment.DIRECTORY_MUSIC等。

  • 特点:适合保存用户希望长期保留并可以与其他应用共享的文件,如照片、音乐等。

2. 外部存储应用特定目录 (App-specific External Storage)

这些目录是应用专属的,在应用卸载后会自动删除里面的内容。不需要任何权限即可读写这些目录中的文件。

  • 获取方法:通过调用Context.getExternalFilesDir()方法获取。它可以传入一个类型参数,例如Context.getExternalFilesDir(Environment.DIRECTORY_PICTURES),或者传入null来访问根目录。

  • 特点:适合存储应用的临时缓存数据或不需要与其他应用共享的大型文件。

3. 外部存储缓存目录 (External Cache Directory)

这是用于存储临时缓存文件的目录。系统可能在存储空间不足时删除这些缓存文件。

  • 获取方法:通过调用Context.getExternalCacheDir()来访问。

  • 特点:适合存放应用运行过程中产生的临时缓存文件。

使用方面的区别

  1. 权限

    • 公共目录:从Android 4.4开始,不需要权限就可以读取媒体文件,但Android 10及更高版本对文件写入做了限制。
    • 应用特定目录和缓存目录:不需要任何权限就可以进行读写操作。
  2. 数据持久性

    • 公共目录:文件通常被保留,直到用户手动删除它们。
    • 应用特定目录和缓存目录:当应用被卸载时,其中的文件会被自动删除。
  3. 共享性

    • 公共目录:文件可以被用户和其他应用访问。
    • 应用特定目录:虽然理论上其他应用也可以访问,但实际上主要是为当前应用服务的,其他应用通常不会去访问。
  4. 隐私性

    • 公共目录:由于所有应用都可以访问,所以隐私性较差。
    • 应用特定目录:相对私密,不易被其他应用访问。
  5. 存储策略

    • 公共目录:建议仅存储用户主动创建或明确希望与他人分享的文件。
    • 应用特定目录:适合存储应用的核心数据和不需共享的大型资源文件。
    • 缓存目录:适合存储临时文件,应用必须能够处理这些文件被系统删除的情况。
  6. Android 10(API 级别 29)以上的存储变更

    • 引入分区存储(Scoped Storage),限制了对外部存储的全局访问,强制应用使用自己的应用特定目录,或通过MediaStore API访问共享文件类型。

开发者在选择存储位置时,应该考虑到这些区别,并基于用户的数据隐私以及文件的用途选择正确的存储路径。

另外更全的介绍 《Android 文件存储系统》

  • 18
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android Q中,要将大数据复制到SD卡中,可以按照以下步骤进行操作: 1. 首先,确保你的应用程序具有适当的权限来访问外部存储器。可以在AndroidManifest.xml文件中添加以下权限声明: <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 2. 创建一个指向外部存储器的目标文件路径。这可以通过使用Environment类中的getExternalStoragePublicDirectory()方法来实现,指定目录的类型(例如,DIRECTORY_DOCUMENTS,DIRECTORY_DOWNLOADS等)和文件名。 File srcFile = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOCUMENTS), "data.txt"); 3. 确保目标目录存在。 如果目录不存在,可以使用mkdirs()方法创建它。 if (!srcFile.getParentFile().exists()) { srcFile.getParentFile().mkdirs(); } 4. 创建一个用于向SD卡写入数据的输出流。可以使用FileOutputStream类进行操作。 OutputStream outputStream = new FileOutputStream(srcFile); 5. 将需要复制到SD卡的数据写入输出流中。你可以使用write()或者writeBytes()方法将数据写入输出流。 outputStream.write(data); 6. 最后,关闭输出流,释放资源。 outputStream.close(); 以上是在Android Q中将大数据复制到SD卡的基本步骤,这些步骤可以帮助你成功完成这个操作。请注意,Android Q引入了一些新的限制来增强用户的数据隐私和安全性,因此在访问外部存储器时,请遵循最新的安全最佳实践。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值