问题现象
原代码如下所示:
if (ze.getName().contains(".gif")) {
gifPath = Environment.getExternalStorageDirectory() + "/DCIM/NewCompete/" + ze.getName().replace("/", "_");
File gifFile = new File(gifPath);
if (!gifFile.exists()) {
copyFile(zf.getInputStream(ze), gifPath);
} else {
if (FileUtil.deleteFile(gifPath)) {//删除原来的安装文件再下载
copyFile(zf.getInputStream(ze), gifPath);
}
}
}
try {
Bitmap map = BitmapFactory.decodeStream(new FileInputStream(picturePath));
mapHeight = map.getHeight();
map.recycle();
} catch (Exception e) {
Log.e("yushan", "" + e);
}
每次创建Bitmap都会报FileNoFoundExecption。
bug原因
在创建多层File(包括要写入的文件)的时候,文件夹和文件要分开来创建,否则明明本地创建文件夹成功,但是在通过IO对指定的File进行读写时就会发生java.io.FileNotFoundException (Is a directory)
解决方法
if (ze.getName().contains(".jpg")) {
picturePath = basePath + ze.getName().replace("/", "_");
PreferenceHelper.put(NewCompeteDetailActivity.this, PreferenceHelper.NEW_COMPETE, "picturePath:" + userid + activeId, picturePath);
File files = new File(basePath);
if (!files.exists()) {
files.mkdir();
}
File mapFile = new File(files + "/", ze.getName().replace("/", "_"));
if (!mapFile.exists()) {
copyFile(zf.getInputStream(ze), picturePath);
} else {
if (FileUtil.deleteFile(picturePath)) {//删除原来的安装文件再下载
copyFile(zf.getInputStream(ze), picturePath);
}
}
}
希望可以解决你的问题。