困惑一天的东西,最后在不经意间的替换解决了问题,记录一下以后估计还会遇到。
先描述下问题,在每次运行到
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(file))
的时候总会报文件打不开,或者就是文件未创建,至于log日志我也懒得还原给你们看了。为了确定到底是哪一步出现的问题我单独把
FileOutputStream fileOutputStream = new FileOutputStream(file);
拿了出来,果然是这里,在网上各种搜各种试大部分都说什么权限的问题,什么要动态加入权限,全都不管用,于是开始思考项目别的地方也有
这种操作为什么不拿那块代码来用呢,复制代码过来之后发现其实出错的原因是file的问题
有问题的获取方式:
String filePath =Environment.getExternalStorageDirectory()
+ FooSysUtil.getInstance().getTimeStr("") + ".jpg";
没问题的获取方式:
String filePath =Environment
.getExternalStorageDirectory().getAbsolutePath()
写到这里忽然惊醒,我上面写的都是屎,如果我没有猜错的话以上陈述的问题根本不是问题的所在,想想报的错,不是打不开文件就是文件不存在,
所以真正的问题是想要写入文件必须先创建文件夹啊,看到代码才明白,不过还好调了一天调出来也是很棒的,还学到点小知识,下面一小段源码
File foder = new File(FilePathUtil.getSdcardPath() + "/JstImage/"); if (!foder.exists()) { foder.mkdirs(); } String fileName = FilePathUtil.getSdcardPath() + "/JstImage/" + System.currentTimeMillis() + ".jpg"; FileOutputStream b = new FileOutputStream(fileName); bmp.compress(Bitmap.CompressFormat.JPEG, 100, b); b.flush(); b.close();
FilePathUtil.getSdcardPath()是我封装的方法,返回值为Environment
.getExternalStorageDirectory().getAbsolutePath()
就这样吧能帮到你最好,帮不到你跟我也没关系,毕竟我就是做个笔记而已。233333333