在App内部存储创建并写入JSON文件失败,求原因排查
问题分析与解决方案
核心问题点
- 父目录未创建:你指定的
mydir目录如果不存在,直接在其中创建文件会失败。系统不会自动创建不存在的父目录,必须手动处理。 - 异常被静默忽略:
catch (e: Exception){}没有任何错误输出,导致你无法定位具体问题(比如读写权限、文件路径错误等)。 - 资源管理不够稳妥:手动调用
flush()和close()容易遗漏,存在资源泄漏风险。
修正后的代码
fun addJson(){ val dir = File(this.filesDir, "mydir") // 确保目标目录存在,不存在则创建(包括多级父目录) if (!dir.exists()) { dir.mkdirs() } try { val file = File(dir,"stempel.json") // 使用use函数自动管理FileWriter资源,无需手动close FileWriter(file).use { writer -> val inputStream = assets.open("stempel.json") // 直接读取assets中的JSON字符串写入目标文件 val json = inputStream.bufferedReader().use { it.readText() } writer.append(json) } // 可选:验证文件是否创建成功 if (file.exists()) { println("文件创建成功,大小:${file.length()}字节") } else { println("文件创建失败") } } catch (e: Exception){ // 打印异常堆栈,快速定位问题 e.printStackTrace() } }
额外说明
从assets读取的JSON字符串无需转成JSONArray再调用toString()——这一步完全多余,还可能破坏原JSON的格式(比如缩进、换行),直接写入原字符串即可。
内容的提问来源于stack exchange,提问作者Kalle
相关产品推荐
相关产品推荐

