#Android开发杂记--新版安卓(SDK>=29)中的文件读写方法

#Android开发杂记--新版安卓(SDK>=29)中的文件读写方法

引言

        众所周知,随着 Android 版本的升级,以下两个用来读写文件的权限逐渐被弃用:

    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

        在新版本的安卓中想要进行文件读写可真不是一件容易的事,笔者翻阅了无数文档后,最终找到了最简单的方法,并且不需要申请任何权限,包括上述两个权限。


外部文件读取

        在新版安卓中,想要进行文件读取,需要用到 Storage Access Framework(SAF)。这是安卓官方推出的专门用于访问设备上的文档和其他文件的一组API。它提供了一种标准化的方式,让应用程序能够与设备的存储空间(包括内部存储和外部存储,如SD卡)进行交互,而无需了解具体的文件系统路径或权限细节。
        使用Storage Access Framework,应用程序可以获得用户授权来访问设备上的文件,而无需直接请求文件系统权限。这使得用户可以更精细地控制他们的数据,并且有助于提高应用程序的安全性和可移植性。
        示例代码如下所示:

registerForActivityResult(ActivityResultContracts.StartActivityForResult()) {
	contentResolver.openInputStream(it.data!!.data!!)!!.buffered().reader().use { reader ->
	    val value = reader.readText()
	    println(value)
	}
}.launch(Intent(Intent.ACTION_OPEN_DOCUMENT).setType("*/*"))

外部文件写入

        ContentResolver是一个关键的类,用于管理应用程序与系统中各种数据源之间的交互。它提供了一种统一的接口,让应用程序可以访问和操作各种类型的数据,包括数据库、文件系统、网络资源等。
        示例代码如下所示:

val content = ContentValues()
content.put(MediaStore.Downloads.DISPLAY_NAME, "abc.ts")
contentResolver.insert(MediaStore.Downloads.EXTERNAL_CONTENT_URI, content)?.let {
    contentResolver.openOutputStream(it)?.buffered().use { writer ->
        writer?.write(data)
    }
}

内部文件读写

        内部文件的读写就简单很多了,直接用 filesDir 获取内部文件路径后即可读写,示例代码如下所示:

tempFile = File(filesDir, "tempFile")
tempFile.outputStream().use {
	it.wirte(data)
}
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值