为什么要判断storePath是文件的路径还是目录的路径

来源:4-2 店铺信息编辑之Service层的实现

qq_森林中的小熊_0

2019-11-24 17:19:58

if(shopImgInputStream != null && fileName != null && !"".equals(fileName)){
    Shop tempShop = shopDao.queryByShopId(shop.getShopId());
    if(tempShop.getShopImg() != null){
        ImageUtil.deleteFileOrPath(tempShop.getShopImg());
    }
    addShopImg(shop, shopImgInputStream, fileName);
}

在实现类中已经判断了原商铺信息对象的图片是否存在,在原图片文件存在的情况下才执行的删除方法

public static void deleteFileOrPath(String storePath) {
    File fileOrPath = new File(PathUtil.getImgBasePath() + storePath);
    if (fileOrPath.exists()) {
        if (fileOrPath.isDirectory()) {
            File files[] = fileOrPath.listFiles();//将路径下所以文件列入数组
            for (int i = 0; i < files.length; i++) {
                files[i].delete();
            }
        }
        fileOrPath.delete();
    }
}

那么在删除方法里面,传进来的肯定是文件路径吧,那么直接fileOrPath.delete();删除文件路径下的图片文件不就可以了吗。而且就算判断传到删除方法里的是目录路径,也不应该把该路径的文件全删了吧,PathUtil.getImgBasePath()根路径的文件也全删了,其他图片不就都没有了吗

写回答

1回答

芝芝兰兰

2019-11-24

同学你好。

1、实现类中tempShop.getShopImg() != null 判断的是从tempShop这个对象中,是否可以获取shopImg这个属性,这个属性是字符串类型的,其中存储的是什么内容,是没有校验的。只要不是null都会传递给ImageUtil.deleteFileOrPath。

http://img.mukewang.com/climg/5dda6020090836ff04100389.jpg


2、而fileOrPath.exists()是判断这个路径代表的文件或者文件夹在本地是否存在,这是很必要的。

如果shopImg这个属性中指定的既不是文件也不是文件夹。那么就没有必要执行删除。

如果是多层的文件夹,贸然执行fileOrPath.delete()是会有问题的。delete()只能删除单个文件和空的目录,如果用来删除包含多个文件或子目录的非空目录就会删除失败。


如果解答了同学的疑问,望采纳~

祝学习愉快~


0

0 学习 · 8263 问题

查看课程