Springboot 打Jar包后导出resources目录下文件夹
目前有一个这样的需求:将项目resources目录中用户放入的文件替代掉容器中从远程下载的配置文件,在网上找了一些资料发现要么是拷贝单一文件,没有拷贝完整文件夹的,要么就是在Jar包中无效,最终自己实现,下面是具体代码,需要依赖 apache commons-io.
/**
* 从resources导出文件夹与文件
*
* @param resourcesPath 源目录 不需要尾部/,如 template
* @param destPath 目标目录 不需要尾部/
* @author OyLong
* @date 2022/11/12 16:38
*/
public static void exportResourcesDictionary(String resourcesPath, String destPath) throws IOException {
ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
Resource[] resources = resolver.getResources(resourcesPath + "/**");
for (Resource resource : resources) {
// 找到所有的非文件夹文件 只能通过尾部/判断 jar包中调用File相关方法会抛出异常
if (!resource.getURL().toString().endsWith(File.separator)) {
String fileUrl = resource.getURL().toString();
// 通过正则将目录截取
Pattern pattern = Pattern.compile((File.separator + resourcesPath) + "(.*$)");
Matcher matcher = pattern.matcher(fileUrl);
if (matcher.find()) {
try (InputStream inputStream = resource.getInputStream()) {
String fileName = destPath + File.separator + matcher.group();
log.info("file will be export:{}", fileName);
File file = new File(fileName);
// 目录不存在 创建
if (!file.getParentFile().exists()) {
if (!file.getParentFile().mkdirs()) {
throw new IOException("dirs create error.");
}
}
// 写出文件
FileUtils.copyToFile(inputStream, file);
}
}
}
}
}
使用这个方法即可实现(包括自动创建文件夹)
调用如下即可将resources目录中的fi-config目录,导出到当前项目的运行目录去
exportResourcesDictionary("fi-config", System.getProperty("user.dir"));
One comment
评论测试