用于spring boot jar包内获取文件目录下所有文件
兼容idea开发环境
ps:原理是解压jar包获取文件,特殊场景使用
引入依赖
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.7.20</version>
</dependency>
工具类
package cn.xxx.utils;
import cn.hutool.core.text.StrPool;
import cn.hutool.core.util.URLUtil;
import cn.hutool.core.util.ZipUtil;
import org.springframework.boot.system.ApplicationHome;
import java.io.File;
/**
* jar资源文件获取
* @author xwt
* @date 2023/1/6 9:50
*/
public class JarFileLoaderUtils {
private static final String JAR_CLASS_PATH = "\\BOOT-INF" + JarFileLoaderUtils.CLASSPATH;
private static final String CLASSPATH = "\\classes\\";
private static final String JAR = ".jar";
private static final String ORIGINAL_JAR = ".original.jar";
private JarFileLoaderUtils() {
}
/***
* 获取jar Resources下文件
* @param path Resources下文件路径
* @param clazz Application.class
* @return Resources下文件
*/
public static File getResourcesFile(String path, Class<?> clazz){
ApplicationHome home = new ApplicationHome(clazz);
File jarFile = home.getSource();
String jarFilePath = jarFile.getAbsolutePath();
String parentFilePath = jarFile.getParentFile().toString();
if(jarFilePath.endsWith(JAR)){
// 解压jar
ZipUtil.unzip(jarFilePath, parentFilePath);
String filePath = URLUtil.normalize((parentFilePath + JAR_CLASS_PATH + path), false).replace("http://", "");
if(jarFilePath.endsWith(ORIGINAL_JAR)){
filePath = URLUtil.normalize((parentFilePath + StrPool.SLASH + path), false).replace("http:/", "");
}
return new File(filePath);
}
return new File(parentFilePath + CLASSPATH + path);
}
}
使用示例,该代码只需要执行一遍,推荐放入static代码块或者Application启动类
Application.class 文件所在jar包内class文件即可
File file = JarFileLoaderUtils.getResourcesFile("fonts", Application.class);