参考文章:原链接/qq_41273101/article/details/125158221
底部给出完整代码
问题1:
在 Android 11(API 级别 30)及更高版本中,应用无法在外部存储设备上创建自己的应用专用目录
创建缓存文件 如需将应用专属文件添加到外部存储空间中的缓存,请获取对 externalCacheDir 的引用:
File externalCacheFile = new File(context.getExternalCacheDir(), filename);
问题2:open failed: EISDIR (Is a directory)
随后产生的另一个问题:open failed: EISDIR (Is a directory)
我的解决方案,直接手动(也可以让系统创建)创建一个文件,然后指定这个文件用来保存数据
1. 打开
根据打印出来的log,去找到相对应的目录,然后创建一个文件,比如我这里创建一个NewTextFile.txt文件,将数据保存到里面
fun saveData(context: Context, data: String) {val externalCacheFile = File(context.externalCacheDir, "saveData1/test1/NewTextFile.txt")try {// 如果文件路径不存在,则创建由该File对象表示的目录if (!externalCacheFile.exists()) {externalCacheFile.createNewFile()logD(this,"文件路径不存在,创建一个新文件:$externalCacheFile")}logD(this,"保存的路径:$externalCacheFile")// 文件输出流,专用于输出原始字节流如图像数据等val fos = FileOutputStream(externalCacheFile)logD(this,"保存数据到本地:$fos")fos.write(data.toByteArray())// 存储之后需要清理相关进程fos.flush()fos.close()}catch (e: Exception){logD(this,"saveData异常:$e")}}}