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

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;
    }

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值