You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何读取手机存储文件中的String并将其存入变量

Android读取手机存储文件内容到变量的完整方案

一、权限前置准备

  • Android 10(API 29)及以上:采用分区存储机制,无需申请READ_EXTERNAL_STORAGE权限,直接通过系统媒体库接口访问文件即可。
  • Android 9及以下:必须先在AndroidManifest.xml中声明权限,再动态申请:
    1. 清单文件添加权限:
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    
    1. 动态申请权限(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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 03:57:29