zoukankan      html  css  js  c++  java
  • springboot读取jar中resource下的文件

    一、一般的读取resource下的static中的图片方法

    方法一:读取非jar中文件

         String resourcePath1 = "/item/img/";
         try {
                ClassPathResource resource = new ClassPathResource("static" + resourcePath);
                File file = resource.getFile();
                logger.info(file.toString());
                if(file != null && file.isDirectory()){
                    File[] files = file.listFiles();
                    if(files != null && files.length >0){
                        for (File f:files) {
                            logger.info(f.getName());
                        }
                    }
                }
            } catch (Exception e) {
                e.printStackTrace();
                logger.error("读取异常",e.getStackTrace());
    
            }

    方法二、读取非jar中文件,或者jar中指定文件名路径的文件 比如 resourcePath= /item/img/aaa.txt,这种以流的方式读取具体文件可以,但是读取目录不行

        String resourcePath = "/item/img/";
        try {
                ClassPathResource resource = new ClassPathResource("static" + resourcePath);
                InputStream inputStream = resource.getInputStream();
                logger.info("=====================开始========================");
                BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
                String line;
                while((line = bufferedReader.readLine()) != null){
                    logger.info(line);
                }
                logger.info("=======================结束======================");
            } catch (Exception e) {
                e.printStackTrace();
                logger.error("读取异常",e.getStackTrace());
    
            }

    首先,这俩种方法在idea中运行时没有问题,可以读取到文件;而且第二种方法在jar中也可以读取指定的文件,地址必须是具体到文件名,读取目录还是不行

    但是在jar中读取一个目录然后去遍历目录中的文件就不可以,war中好像可以,本人没有测,然后找到下面这个方法

    二、读取jar中的static中某个目录下的图片

            try {
                Resource[] resources = new PathMatchingResourcePatternResolver().getResources(ResourceUtils.CLASSPATH_URL_PREFIX + "static"+resourcePath+"*.png");
                // 遍历文件内容
                logger.info("=====================开始========================");
                for(Resource resource : resources) {
                    String filename = resource.getFilename();
                    logger.info("================"+filename+"================");
                }
                logger.info("=======================结束======================");
            } catch (IOException e) {
                e.printStackTrace();
                logger.error("读取异常",e.getStackTrace());
            }

    这个方法完美读取到了jar中文件,以下是参考的内容

    public static void main(String[] args) throws IOException {
            // TODO 加载当前项目classpath下META-INF/folder及其子文件夹中的所有文件
            Resource[] resources = new PathMatchingResourcePatternResolver().getResources(ResourceUtils.CLASSPATH_URL_PREFIX + "META-INF/folder/**/*.txt");
     
            // TODO 加载当前项目classpath下META-INF/folder及其子文件夹中的所有以.txt结尾的文件
            Resource[] resources2 = new PathMatchingResourcePatternResolver().getResources(ResourceUtils.CLASSPATH_URL_PREFIX + "META-INF/folder/**/*.txt");
     
            // TODO 加载当前项目及所有jar中classpath下的所有META-INF/spring.factories文件(springboot自动装配的主要功能)
            Resource[] resources3 = new PathMatchingResourcePatternResolver().getResources(ResourcePatternResolver.CLASSPATH_ALL_URL_PREFIX + "META-INF/spring.factories");
     
            // 遍历文件内容
            for(Resource resource : resources) {
                StringBuffer script = new StringBuffer();
                try(InputStreamReader isr = new InputStreamReader(resource.getInputStream(), StandardCharsets.UTF_8);
                    BufferedReader bufferReader = new BufferedReader(isr)) {
                    String tempString;
                    while ((tempString = bufferReader.readLine()) != null) {
                        script.append(tempString).append("
    ");
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                }
                System.out.println("script:" + script.toString());
            }
        }
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
        <version>2.1.0.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-cache</artifactId>
        <version>2.1.0.RELEASE</version>
    </dependency>

     maven有的话就不用再次引入了

  • 相关阅读:
    字符串replaceAll()方法报错:java.util.regex.PatternSyntaxException:Unclosed group near index...
    eclipse导入Tomcat8源码
    [白话解析] 深入浅出朴素贝叶斯模型原理及应用
    [白话解析] 深入浅出一致性Hash原理
    [白话解析] 深入浅出贝叶斯定理
    [白话解析] 深入浅出边缘计算
    [梁山好汉说IT] 用实例来深入理解容器概念
    [梁山好汉说IT] 梁山好汉和抢劫银行
    [梁山好汉说IT] 梁山好汉和秒杀系统
    [梁山好汉说IT] 区块链在梁山的应用
  • 原文地址:https://www.cnblogs.com/h-c-g/p/15396310.html
Copyright © 2011-2022 走看看