Kotlin中FileWriter无法创建文件问题求助
问题分析与解决方案
你遇到的问题核心是Android文件系统的权限与路径限制:直接使用FileWriter("data.json")会尝试写入设备的根目录,但普通Android应用没有根目录的写入权限,因此抛出IOException,导致文件创建失败,Logcat才会输出"not fn"。
下面是具体的修复方案,分两种常见场景:
方案1:写入应用私有内部存储(推荐)
应用的私有内部存储目录只有你的应用能访问,不需要额外权限,卸载应用时文件会被自动删除,适合保存应用专属数据。
修改代码中的FileWriter初始化部分,使用Context提供的filesDir获取正确的路径:
// 注意:需要传入Context,比如在Activity中直接用this,在ViewModel中需要通过构造函数传入Context fun writeJson(context: Context) { val item1 = InterItem(1, DateT(2018, Calendar.FEBRUARY, 6).date, "Dina", "type1") val item2 = InterItem(2, DateT(2018, Calendar.MARCH, 8).date, "Lili", "type2") val item3= InterItem(3, DateT(2018, Calendar.MAY, 10).date, "Wassim", "type3") val res = ListInter() res.list= arrayListOf( item1, item2, item3) val gson = GsonBuilder().setPrettyPrinting().create() val strJson = gson.toJson(res) // 使用应用私有内部目录路径 val jsonFile = File(context.filesDir, "data.json") try { FileWriter(jsonFile).use { writer -> writer.write(strJson) } Log.d("success", "文件写入成功,路径:${jsonFile.absolutePath}") } catch (e: IOException) { // 打印具体错误信息,方便排查 e.printStackTrace() Log.e("errr","写入失败:${e.message}") } }
这里用了Kotlin的use函数,它会自动关闭流,不需要手动在finally里处理,更简洁安全。
方案2:写入外部存储(如果需要共享文件)
如果需要文件能被其他应用访问,或者想保存到外部存储(比如SD卡),需要注意Android的分区存储规则:
- 对于Android 10+(API 29+),推荐写入应用专属外部目录(不需要权限),路径通过
context.getExternalFilesDir(null)获取,卸载应用时文件会被删除。 - 如果要写入公共目录(比如Downloads),需要动态申请
WRITE_EXTERNAL_STORAGE权限(Android 10+还需要额外处理MediaStore)。
示例代码(应用专属外部目录):
fun writeJsonToExternal(context: Context) { // 其他逻辑和方案1一致... val strJson = gson.toJson(res) val externalDir = context.getExternalFilesDir(null) val jsonFile = File(externalDir, "data.json") try { FileWriter(jsonFile).use { writer -> writer.write(strJson) } Log.d("success", "外部存储写入成功,路径:${jsonFile.absolutePath}") } catch (e: IOException) { e.printStackTrace() Log.e("errr","外部存储写入失败:${e.message}") } }
额外建议
- 优化错误日志:把
Log.e("errr","not fn")改成Log.e("errr","写入失败:${e.message}"),这样能看到具体的错误原因(比如权限被拒、路径不存在等),方便快速排查。 - 检查权限:如果写入公共外部目录,记得在AndroidManifest.xml中声明权限,并在运行时动态申请(Android 6.0+)。
内容的提问来源于stack exchange,提问作者DINA TAKLIT
相关产品推荐
相关产品推荐

