目录
前言
记录于此,方便自己查阅。
好记性不如烂笔头
如下提示:
System.err(16574): java.io.FileNotFoundException: /storage/emulated/0/media_favorite/BLACKPINK-Kill This Love.flac (No such file or directory) System.err(16574): at java.io.FileOutputStream.open0(Native Method) System.err(16574): at java.io.FileOutputStream.open(FileOutputStream.java:308) System.err(16574): at java.io.FileOutputStream.<init>(FileOutputStream.java:238) System.err(16574): at java.io.FileOutputStream.<init>(FileOutputStream.java:119) System.err(16574): at com.water.music.utils.MediaUtils.copyMediaFile(MediaUtils.java:116) System.err(16574): at com.water.music.MusicActivity$2.handleMessage(MusicMainActivity.java:333) System.err(16574): at android.os.Handler.dispatchMessage(Handler.java:102) System.err(16574): at android.os.Looper.loop(Looper.java:193) System.err(16574): at android.os.HandlerThread.run(HandlerThread.java:65)
总结
日志中其实提示很明白了
No such file or directory
我的这个问题就是该目录不存在,因此判断目录(/storage/emulated/0/media_favorite)是否存在,不存在就创建一下即可。
正文
这里整理一下网上说的可能存在的原因:
一、权限问题
我的在AndroidManifest.xml是配置了相关权限的
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
二、需要动态申请权限
我的是系统应用,所以不用担心这个问题。同时我也动态的申请了权限:
可以参考《Android 10上读取sdcard中的文件时出现open failed EACCES (Permission denied)》中的代码片段。
这里就不重复了。
三、/storage/emulated/0/media_favorite 这个没有读写权限
这个我测试过,我的是可以访问的。
四、没有创建/storage/emulated/0/media_favorite 这个目录
上面网上方式我尝试过后,还是不行,最后我使用命令创建了对应的目录,发现就可以了。
(尴尬,没有目录怎么可以拷贝进入呢!!)
因此加入如下代码:
File destDir = new File("/storage/emulated/0/media_favorite"); if (!destDir.exists()) { destDir.mkdirs(); }
文件拷贝代码片段
FAVORITE_PATH = "/storage/emulated/0/media_favorite";
/** * @param srcPath * @param mediaName * @return */ public static boolean copyFile(String srcPath, String mediaName) { if (TextUtils.isEmpty(srcPath)) { Log.d(TAG, "copyFile srcPath null."); return false; } File destDir = new File(FAVORITE_PATH); if (!destDir.exists()) { destDir.mkdirs(); } File destFile = new File(FAVORITE_PATH + "/" + mediaName); if (null != destFile && destFile.exists()) { Log.d(TAG, "copyFile srcPath file exist."); return true; } InputStream inputStream = null; FileOutputStream fileOutputStream = null; try { File file = new File(srcPath); if (null != file && file.exists()) { inputStream = new FileInputStream(srcPath); fileOutputStream = new FileOutputStream(FAVORITE_PATH + "/" + mediaName); byte[] buffer = new byte[1024]; int count = 0; while ((count = inputStream.read(buffer)) != -1) { fileOutputStream.write(buffer, 0, count); } buffer = null; return true; } } catch (Exception e) { e.printStackTrace(); } finally { try { if (null != inputStream) { inputStream.close(); } if (null != fileOutputStream) { fileOutputStream.close(); } } catch (IOException e) { e.printStackTrace(); } } return false; }
参考文章
- 《W/System.err: java.io.FileNotFoundException: /storage/emulated/0/Download/20200813063004.txt: open》
- 《System.err: java.io.FileNotFoundException: /storage/emulated/0/***(No such file or directory)》
历史上的今天
暂无评论...
随机推荐
陈独秀:人生的真义
人生在世,究竟为的甚么?究竟应该怎样?这两句话实在难得回答的很,我们若是不能回答这两句话,糊糊涂涂过了一生,岂不是太无意识吗?自古以来,说明这个道理的人也算不少,大概约有数种:第一是宗教家,像那佛教家说:世界本来是个幻象,人生本来无生;“真如”本性为“无明”所迷,才现出一切生灭幻象;一旦“无明”灭,...
C语言输出格式符
前言简单记录一下C语言中输出格式符正文C语言中常用的打印方式:printf("%d", a);除了d,还有其他的格式符,下面简单记录一下。十进制整数%d%i举个例子,也就是:printf("%i", a);PS: 后续的类似,不在举例十进制 无符号整数%u十六进...
朱自清:冬天
说起冬天,忽然想到豆腐。是一“小洋锅”(铝锅)白煮豆腐,热腾腾的。水滚着,像好些鱼眼睛,一小块一小块豆腐养在里面,嫩而滑,仿佛反穿的白狐大衣。锅在“洋炉子”(煤油不打气炉)上,和炉子都熏得乌黑乌黑,越显出豆腐的白。这是晚上,屋子老了,虽点着“洋灯”,也还是阴暗。围着桌子坐的是父亲跟我们哥儿三个。“洋...
丰子恺:渐
不为“渐”所迷,不为造物所欺,而收缩无限的时间并空间于方寸的心中。故佛家能纳须弥于芥子。使人生圆滑进行的微妙的要素,莫如“渐”;造物主骗人的手段,也莫如“渐”。在不知不觉之中,天真烂漫的孩子“渐渐”变成野心勃勃的青年;慷慨豪侠的青年“渐渐”变成冷酷的成人;血气旺盛的成人“渐渐”变成顽固的老头子。因为...
Launcher2导入Eclipse
在分析源码中,除了使用Source Insight 这个强大的软件外,有些应用还是用编译器看源码是最好的,因此今天我们学习一下如何导入源码到Eclipse中。这里主要是讲正确把Android 6.0 的Launcher2 导入Eclipse中并运行和安装应用。工具: Eclipse,L...
git diff提示filemode发生改变
在使用git的时候遇到的,因此摘抄于此。今天clone代码,git status显示修改了大量文件,git diff提示filemode变化,如下:diff --git a/Android.mk b/Android.mkold mode 100644new mode 100755原...