900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > Android open failed: ENOENT (No such file or directory)以及open failed: EISDIR (Is a directory)

Android open failed: ENOENT (No such file or directory)以及open failed: EISDIR (Is a directory)

时间:2018-09-09 18:56:44

相关推荐

Android open failed: ENOENT (No such file or directory)以及open failed: EISDIR (Is a directory)

参考文章:原链接/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")}}}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。