【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(); } } }