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"));

Last modification:November 12, 2022
If you think my article is useful to you, please feel free to appreciate