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

浙公网安备 33010602011771号