您的位置:首页 > 其它

file!=null和file.exists()的区别

2016-05-23 15:16 435 查看
1:问题描述

代码:

//第一个方法:根据url进行拼接文件,获取文件的方法

    public static File getImageFile(String imagePath){

        //1获取sd卡的目录

        File root = Environment.getExternalStorageDirectory();

        //2判断sk卡是否存在(等价于Environment.getExternalStorageState());

        if (root.exists()){

            //拼接图片存储路径的字符串,并且判断这个文件是否存在

            //如果存在,则返回这个文件,供其他地方使用,否则返回Null

            //这里可以看到,获取到一个变量的时候我们最常用的操作就是判断是否为空

            File file = new File(root.getAbsolutePath()+"/"+IMAGE_PATH+"/"+imagePath+".jpg");

            if (file!=null&&file.exists()){

                return file;

            }

        }

        return null;

    }

//第三个方法:根据路径判断图片是否存在的方法

    //缓存的使用:当在sd卡已经存在这个文件的时候,我们应该在内存拿而不是在网络获取

    public static boolean checkImageExists(String imagePath){

        //1先把传进来的图片url转换成文件

        File imageFile = getImageFile(imagePath);

        //判断是否存在 

        if (imageFile.exists()&&imageFile.length()>0) {

            //2通过文件的路径获取获取一个Bitmap

            Bitmap bitmap = getBitmap(imageFile.getAbsolutePath());

            //3不为空返回true

            if (bitmap != null) {

                return true;

            }

        }

        //其他情况返回false

        return false;

    }

    场景:网络获取资源图片,判断在本地是否有缓存,如果有缓存直接去,没有缓存直接下载;

    错误:在图片需要在网络下载的时候发生NullpointException;

2:问题分析

为什么会出现这种问题呢?

关键就在于方法3的判断if (imageFile.exists()&&imageFile.length()>0)

我之前的想法是直接就能用这个imageFile.exists()代替imageFile!=null,

但是imageFile.exists()不存在是运行时才能发现, 和文件是不是null没什么关系,文件null的判断是对象级的;

如果你定义File file = null;那么就一定出现空指针

如果你定义File file = new File('xxxxx');

那么这个file绝不是null, 而file到底存在不存在是运行时捕获的异常, 即你写程序的时候是不可能知道在不在的........

所以两者不是一回事

3解决方法

//第三个方法:根据路径判断图片是否存在的方法

    //缓存的使用:当在sd卡已经存在这个文件的时候,我们应该在内存拿而不是在网络获取

    public static boolean checkImageExists(String imagePath){

        //1先把传进来的图片url转换成文件

        File imageFile = getImageFile(imagePath);

        //判断是否存在  !=null与exists是有区别的 前者是指代码的未初始化,后者是指文件是否存在

        if (imageFile!=null&&imageFile.exists()&&imageFile.length()>0) {

            //2通过文件的路径获取获取一个Bitmap

            Bitmap bitmap = getBitmap(imageFile.getAbsolutePath());

            //3不为空返回true

            if (bitmap != null) {

                return true;

            }

        }

        //其他情况返回false

        return false;

    }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: