【Java】删除项目中多余的SVG图片资源

 

在DB库的菜单表,每个菜单会存放对应的svg图片名称,用于菜单渲染

 

在页面中的渲染:

在项目的目录的存放位置:

 

需求是这个目录还存放了很多不需要的svg图片,需要把他们删除掉

数量有七八十张,人肉手删效率低,容易删错,还要比较校验

 

解决:

所以我在后台项目里面写了一个单元测试:

首先随便找一个MybatisMapper

放上这个查询SQL:

package cn.ymcd.wss.config.dao;

import cn.ymcd.wss.config.dto.AdvertiseDTO;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Select;

import java.util.List;

/**
 * @projectName: wss-manager-server
 * @author: Cloud9
 * @date: 2022年07月26日 18:04
 * @version: 1.0
 */
public interface AdvertiseDAO extends BaseMapper<AdvertiseDTO> {
    
    /**
     *
     * 查询有在使用的svg图片名称
     * @param 
     * @return java.util.List<java.lang.String>
     * @author Cloud9
     * @createTime 2022/7/28 09:56
     *
     */
    @Select("SELECT DISTINCT ICON FROM PT_FUNC WHERE ICON IS NOT NULL ORDER BY ICON DESC")
    List<String> queryUsedSvgIcons();
}

  

然后编写单元测试:

逻辑思路:

1、查出在系统使用了的svg资源名

2、开辟系统资源访问需要操作的svg资源目录

3、遍历目录,把下面的子文件逐个比较判断

4、匹配失败,表示未使用的svg,执行删除

package cn.ymcd.wss;

import static org.junit.Assert.assertTrue;

import cn.ymcd.wss.config.dao.AdvertiseDAO;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

import java.io.File;
import java.util.Arrays;
import java.util.List;

/**
 * Unit test for simple App.
 */

@RunWith(SpringRunner.class)
@SpringBootTest(classes = {ManagerBootApplication.class})
public class AppTest
{
    /**
     * Rigorous Test :-)
     */
    @Test
    public void shouldAnswerWithTrue()
    {
        assertTrue( true );
    }


    @Autowired
    private AdvertiseDAO advertiseDAO;

    /**
     * 删除未使用的svg资源
     * @param
     * @return void
     * @author Cloud9
     * @createTime 2022/7/27 10:37
     *
     * SELECT DISTINCT ICON FROM PT_FUNC WHERE ICON IS NOT NULL ORDER BY ICON DESC
     *
     */
    @Test
    public void deleteSvgDirectoryUnusedResource() {
        String filePath = "C:\\Users\\Administrator\\Desktop\\wss-web\\wss-manager-web\\src\\icons\\svg";
        File file = new File(filePath);
        System.out.println(file);
        boolean isDir = file.isDirectory();
        if (!isDir) return;
        List<String> stringList = advertiseDAO.queryUsedSvgIcons();
        List<File> fileList = Arrays.asList(file.listFiles());

        for (File realFile : fileList) {
            String path = realFile.getPath();
            final String currentFileName = path.substring(path.lastIndexOf("\\") + 1);
            String res = stringList.stream().filter(str -> currentFileName.equals(str + ".svg")).findFirst().orElse("");
            if ("".equals(res)) realFile.delete();
        }
    }
}

  

 

posted @ 2022-07-28 10:07  emdzz  阅读(437)  评论(0编辑  收藏  举报