我的编程空间,编程开发者的网络收藏夹
学习永远不晚

springboot怎么实现jar运行复制resources文件到指定的目录

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

springboot怎么实现jar运行复制resources文件到指定的目录

今天小编给大家分享一下springboot怎么实现jar运行复制resources文件到指定的目录的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

springboot实现jar运行复制resources文件到指定的目录

1. 需求

在项目开发过程中需要将项目resources/static/目录下所有资源资源复制到指定目录。公司项目中需要下载视频文件,由于下载的有个html页面,对多路视频进行画面加载,用到对应的静态资源文件,如js,css.jwplayer,jquery.js等文件

maven打成的jar和平时发布的项目路径不通,所以在读取路径的时候获取的是jar的路径,无法获取jar里面的文件路径

2. 思路

根据我的需求,复制的思路大概是,先获取到resources/static/blog目录下文件清单,然后通过清单,循环将文件复制到指定位置(相对路径需要确保一致)

因为项目会被打成jar包,所以不能用传统的目录文件复制方式,这里需要用到Spring Resource:

Resource接口,简单说是整个Spring框架对资源的抽象访问接口。它继承于InputStreamSource接口。后续文章会详细的分析。

Resource接口的方法说明:

方法说明
exists()判断资源是否存在,true表示存在。
isReadable()判断资源的内容是否可读。需要注意的是当其结果为true的时候,其内容未必真的可读,但如果返回false,则其内容必定不可读。
isOpen()判断当前Resource代表的底层资源是否已经打开,如果返回true,则只能被读取一次然后关闭以避免资源泄露;该方法主要针对于InputStreamResource,实现类中只有它的返回结果为true,其他都为false。
getURL()返回当前资源对应的URL。如果当前资源不能解析为一个URL则会抛出异常。如ByteArrayResource就不能解析为一个URL。
getURI()返回当前资源对应的URI。如果当前资源不能解析为一个URI则会抛出异常。
getFile()返回当前资源对应的File。
contentLength()返回当前资源内容的长度
lastModified()返回当前Resource代表的底层资源的最后修改时间。
createRelative()根据资源的相对路径创建新资源。[默认不支持创建相对路径资源]
getFilename()获取资源的文件名。
getDescription()返回当前资源底层资源的描述符,通常就是资源的全路径(实际文件名或实际URL地址)。
getInputStream()获取当前资源代表的输入流。除了InputStreamResource实现类以外,其它Resource实现类每次调用getInputStream()方法都将返回一个全新的InputStream。

获取Resource清单,我需要通过ResourceLoader接口获取资源,在这里我选择了

org.springframework.core.io.support.PathMatchingResourcePatternResolver

3. 实现代码

    private void copyJwplayer() {        //判断指定目录下文件是否存在        ApplicationHome applicationHome = new ApplicationHome(getClass());        String rootpath = applicationHome.getSource().getParentFile().toString();        String realpath=rootpath+"/vod/jwplayer/";   //目标文件        String silderrealpath=rootpath+"/vod/jwplayer/silder/";   //目标文件        String historyrealpath=rootpath+"/vod/jwplayer/history/";   //目标文件        String jwplayerrealpath=rootpath+"/vod/jwplayer/jwplayer/";   //目标文件        String layoutrealpath=rootpath+"/vod/jwplayer/res/layout/";   //目标文件                //不使用getFileFromClassPath()则报[static/jwplayerF:/workspace/VRSH265/target/classes/static/jwplayer/flvjs/] cannot be resolved to URL because it does not exist        //jwplayer        File fileFromClassPath = FreeMarkerUtil.getFileFromClassPath("/static/jwplayer/");  //复制目录        FreeMarkerUtil.BatCopyFileFromJar(fileFromClassPath.toString(),realpath);        //silder        File flvjspath = FreeMarkerUtil.getFileFromClassPath("/static/jwplayer/silder/");  //复制目录        FreeMarkerUtil.BatCopyFileFromJar(flvjspath.toString(),silderrealpath);        //history        File historypath = FreeMarkerUtil.getFileFromClassPath("/static/jwplayer/history/");  //复制目录        FreeMarkerUtil.BatCopyFileFromJar(historypath.toString(),historyrealpath);        //jwplayer        File jwplayerpath = FreeMarkerUtil.getFileFromClassPath("/static/jwplayer/jwplayer/");  //复制目录        FreeMarkerUtil.BatCopyFileFromJar(jwplayerpath.toString(),jwplayerrealpath);        //layout        File layoutpath = FreeMarkerUtil.getFileFromClassPath("/static/jwplayer/res/layout/");  //复制目录        FreeMarkerUtil.BatCopyFileFromJar(layoutpath.toString(),layoutrealpath);    }

4. 工具类FreeMarkerUtil

package com.aio.util;import org.apache.commons.io.FileUtils;import org.apache.commons.lang3.StringUtils;import org.springframework.core.io.ClassPathResource;import org.springframework.core.io.Resource;import org.springframework.core.io.support.PathMatchingResourcePatternResolver;import org.springframework.core.io.support.ResourcePatternResolver;import java.io.*;public class FreeMarkerUtil {           public static void BatCopyFileFromJar(String path,String newpath) {        if (!new File(newpath).exists()){            new File(newpath).mkdir();        }        ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();        try {            //获取所有匹配的文件            Resource[] resources = resolver.getResources(path+"    public static boolean makeFile(String path) {        File file = new File(path);        if(file.exists()) {            return false;        }        if (path.endsWith(File.separator)) {            return false;        }        if(!file.getParentFile().exists()) {            if(!file.getParentFile().mkdirs()) {                return false;            }        }        try {            if (file.createNewFile()) {                return true;            } else {                return false;            }        } catch (IOException e) {            e.printStackTrace();            return false;        }    }        public static void write2File(InputStream is, String filePath) throws IOException {        OutputStream os = new FileOutputStream(filePath);        int len = 8192;        byte[] buffer = new byte[len];        while ((len = is.read(buffer, 0, len)) != -1) {            os.write(buffer, 0, len);        }        os.close();        is.close();    }        public static File getFileFromClassPath(String path){        File targetFile = new File(path);        if(!targetFile.exists()){            if(targetFile.getParent()!=null){                File parent=new File(targetFile.getParent());                if(!parent.exists()){                    parent.mkdirs();                }            }            InputStream initialStream=null;            OutputStream outStream =null;            try {                Resource resource=new ClassPathResource(path);                //注意通过getInputStream,不能用getFile                initialStream=resource.getInputStream();                byte[] buffer = new byte[initialStream.available()];                initialStream.read(buffer);                outStream = new FileOutputStream(targetFile);                outStream.write(buffer);            } catch (IOException e) {            } finally {                if (initialStream != null) {                    try {                        initialStream.close(); // 关闭流                    } catch (IOException e) {                    }                }                if (outStream != null) {                    try {                        outStream.close(); // 关闭流                    } catch (IOException e) {                    }                }            }        }        return targetFile;    }}

5.效果

springboot怎么实现jar运行复制resources文件到指定的目录

以上就是“springboot怎么实现jar运行复制resources文件到指定的目录”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注编程网行业资讯频道。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

springboot怎么实现jar运行复制resources文件到指定的目录

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

springboot怎么实现jar运行复制resources文件到指定的目录

今天小编给大家分享一下springboot怎么实现jar运行复制resources文件到指定的目录的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我
2023-07-06

springboot实现jar运行复制resources文件到指定的目录(思路详解)

这篇文章主要介绍了springboot实现jar运行复制resources文件到指定的目录,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
2023-05-15

php怎么复制文件到指定目录

你可以使用PHP的copy()函数来复制文件到指定目录。以下是一个示例代码:$sourceFile = path/to/source/file.txt;$destinationDir = path/to/destination/;$
php怎么复制文件到指定目录
2024-03-11

Java实现文件或文件夹的复制到指定目录实例

整理文档,搜刮出一个Java实现文件或文件夹的复制到指定目录的代码,稍微整理精简一下做下分享。import java.io.File; import java.io.FileInputStream; import java.io.FileO
2023-05-31

使用vbs怎么复制指定文件到指定目录下

这篇文章给大家介绍使用vbs怎么复制指定文件到指定目录下,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。核心代码Set fso=CreateObject("Scripting.filesystemobject")Func
2023-06-08

Linux命令 移动/复制文件/目录到指定目录下的实现

这篇文章主要介绍了Linux命令 移动/复制文件/目录到指定目录下的实现方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
2023-05-17

Linux命令 移动/复制文件/目录到指定目录下的实现

目录linux命令 移动/复制文件/目录到指定目录下1、同一个服务器下复制文件或文件夹2、 跨服务器拷贝文件或者文件夹3、使用示例4、移动文件夹到另一个文件夹设置Linux命令别名服务器上的 alias 命令一览alias 添加别名总结Li
2023-04-26

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录