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
相关产品推荐
相关产品推荐

