如何读取手机存储文件中的String并将其存入变量
Android读取手机存储文件内容到变量的完整方案
一、权限前置准备
- Android 10(API 29)及以上:采用分区存储机制,无需申请
READ_EXTERNAL_STORAGE权限,直接通过系统媒体库接口访问文件即可。 - Android 9及以下:必须先在
AndroidManifest.xml中声明权限,再动态申请:- 清单文件添加权限:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />- 动态申请权限(Kotlin示例):
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q && ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions(this, arrayOf(Manifest.permission.READ_EXTERNAL_STORAGE), 1001) }
二、读取下载目录file.txt到变量
方案1:适配Android 10+(推荐)
通过MediaStore查询文件并读取内容,避免权限问题:
fun readDownloadFile(fileName: String): String? { val projection = arrayOf(MediaStore.Files.FileColumns._ID) val selection = "${MediaStore.Files.FileColumns.DISPLAY_NAME} = ? AND ${MediaStore.Files.FileColumns.RELATIVE_PATH} = ?" val selectionArgs = arrayOf(fileName, "${Environment.DIRECTORY_DOWNLOADS}/") contentResolver.query( MediaStore.Files.getContentUri("external"), projection, selection, selectionArgs, null )?.use { cursor -> if (cursor.moveToFirst()) { val fileId = cursor.getLong(cursor.getColumnIndexOrThrow(MediaStore.Files.FileColumns._ID)) val contentUri = ContentUris.withAppendedId(MediaStore.Files.getContentUri("external"), fileId) contentResolver.openInputStream(contentUri)?.use { stream -> return stream.bufferedReader().readText() } } } return null } // 调用并存储到变量 val fileContent = readDownloadFile("file.txt")
方案2:兼容Android 9及以下
直接通过文件路径读取(API 30+此方法已标记为废弃):
fun readFileFromDownloadDir(fileName: String): String? { val downloadDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS) val targetFile = File(downloadDir, fileName) return if (targetFile.exists() && targetFile.canRead()) { targetFile.bufferedReader().readText() } else { null } } // 调用 val fileContent = readFileFromDownloadDir("file.txt")
三、常见问题排查
- 权限缺失:Android 9及以下未动态申请
READ_EXTERNAL_STORAGE会直接拒绝访问 - 路径错误:确认文件确实在系统标准下载目录下,部分厂商定制系统可能有差异,但
Environment.DIRECTORY_DOWNLOADS是统一入口 - 文件不存在:先通过系统文件管理器确认
file.txt的位置和文件名拼写 - Android 10+权限异常:API 29+禁用直接文件路径访问,必须改用
MediaStore或存储访问框架(SAF)
内容的提问来源于stack exchange,提问作者unknownCoder
相关产品推荐
相关产品推荐

