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

Flutter从Firebase下载文件:需检查文件是否存在并求示例代码

Android 端检查 Assets 文件存在性并从 Firebase 下载文件示例

1. 检查 Assets 目录下文件是否存在

Android 的 AssetManager 没有直接的文件存在性检查 API,通常通过尝试打开文件并捕获异常的方式判断:

// Java 版本
private boolean isAssetFileExists(String filePath) {
    try {
        // 尝试打开指定路径的 assets 文件,无异常则说明存在
        getAssets().open(filePath);
        return true;
    } catch (IOException e) {
        // 抛出异常则文件不存在
        return false;
    }
}
// Kotlin 版本
private fun isAssetFileExists(filePath: String): Boolean {
    return try {
        assets.open(filePath)
        true
    } catch (e: IOException) {
        false
    }
}

2. 结合 Firebase Storage 的完整业务逻辑

先检查 Assets 中的离线文件是否存在,存在则直接使用;不存在则从 Firebase Storage 下载到设备内部存储并使用:

Java 实现

// 初始化 Firebase Storage 引用
FirebaseStorage storage = FirebaseStorage.getInstance();
StorageReference targetFileRef = storage.getReference("files/example.txt"); // Firebase 存储路径
String assetFilePath = "example.txt"; // Assets 中的文件路径

// 优先检查离线文件
if (isAssetFileExists(assetFilePath)) {
    // 使用 Assets 中的离线文件
    try (InputStream inputStream = getAssets().open(assetFilePath);
         BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream))) {
        String content = reader.readLine();
        // 这里处理离线文件的内容或使用逻辑
    } catch (IOException e) {
        e.printStackTrace();
    }
} else {
    // 从 Firebase 下载文件到内部存储
    File localSaveFile = new File(getFilesDir(), "example.txt");
    targetFileRef.getFile(localSaveFile)
            .addOnSuccessListener(taskSnapshot -> {
                // 下载成功,处理本地文件
                try (FileInputStream inputStream = new FileInputStream(localSaveFile);
                     BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream))) {
                    String content = reader.readLine();
                    // 处理下载后的文件内容
                } catch (IOException e) {
                    e.printStackTrace();
                }
            })
            .addOnFailureListener(exception -> {
                // 下载失败的异常处理
                exception.printStackTrace();
            });
}

Kotlin 实现

// 初始化 Firebase Storage 引用
val storage = FirebaseStorage.getInstance()
val targetFileRef = storage.getReference("files/example.txt") // Firebase 存储路径
val assetFilePath = "example.txt" // Assets 中的文件路径

// 优先检查离线文件
if (isAssetFileExists(assetFilePath)) {
    // 使用 Assets 中的离线文件
    assets.open(assetFilePath).use { inputStream ->
        BufferedReader(InputStreamReader(inputStream)).use { reader ->
            val content = reader.readLine()
            // 处理离线文件的内容或使用逻辑
        }
    }
} else {
    // 从 Firebase 下载文件到内部存储
    val localSaveFile = File(filesDir, "example.txt")
    targetFileRef.getFile(localSaveFile)
        .addOnSuccessListener {
            // 下载成功,处理本地文件
            FileInputStream(localSaveFile).use { inputStream ->
                BufferedReader(InputStreamReader(inputStream)).use { reader ->
                    val content = reader.readLine()
                    // 处理下载后的文件内容
                }
            }
        }
        .addOnFailureListener { exception ->
            // 下载失败的异常处理
            exception.printStackTrace()
        }
}

内容的提问来源于stack exchange,提问作者Mena Edwar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 16:42:13