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("\n");
                }
            } 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有的話就不用再次引入了


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM