Spring boot 从resources文件夹中读取文件

学习使用ClassPathResourceResourceLoader从 Spring Boot应用程序中的资源文件夹中读取文件
出于演示目的,我data.txt在资源文件夹中添加了具有以下文本内容的文件。

leftso.com
Java Tutorials Blog

1. 类路径资源

ClassPathResource是Resource类路径资源的实现。
它支持解析,java.io.File好像类路径资源驻留在文件系统中,但不支持 JAR 中的资源。要读取 jar 或 war 文件中的文件,请使用resource.getInputStream()方法。

import java.io.IOException;
import java.io.InputStream;
import java.nio.charset.StandardCharsets;
 
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
import org.springframework.util.FileCopyUtils; 
 
@SpringBootApplication
public class Application implements CommandLineRunner
{
    final Logger LOGGER = LoggerFactory.getLogger(getClass());
             
    public static void main(String[] args) 
    {
        SpringApplication app = new SpringApplication(Application.class);
        app.run(args);
    }
 
    @Override
    public void run(String... args) throws Exception 
    {
        Resource resource = new ClassPathResource("data.txt");
        InputStream inputStream = resource.getInputStream();
        try {
            byte[] bdata = FileCopyUtils.copyToByteArray(inputStream);
            String data = new String(bdata, StandardCharsets.UTF_8);
            LOGGER.info(data);
        } catch (IOException e) {
            LOGGER.error("IOException", e);
        }
    }
}

特别提醒:以下为错误写法,不能写classpath:否则找不到文件。
Resource resource = new ClassPathResource("classpath:data.txt");

 

Console

$ java -jar target/springbootdemo-0.0.1-SNAPSHOT.jar
 
leftso.com
Java Tutorials Blog

2.使用ResourceLoader从资源中读取文件

除了使用ClassPathResource,我们还可以使用ResourceLoader来加载资源(例如类路径或文件系统资源)。
一个ApplicationContext需要提供这样的功能,再加上扩展ResourcePatternResolver支持。
文件路径可以是完全限定的 URL,例如"file:C:/test.dat""classpath:test.dat"。它支持相对文件路径,例如"WEB-INF/test.dat".

$title(​​​​​​​Application.java)
final Logger LOGGER = LoggerFactory.getLogger(getClass());
     
@Autowired
ResourceLoader resourceLoader;
 
@Override
public void run(String... args) throws Exception 
{
    Resource resource = resourceLoader.getResource("classpath:data.txt");
    InputStream inputStream = resource.getInputStream();
 
    try
    {
        byte[] bdata = FileCopyUtils.copyToByteArray(inputStream);
        String data = new String(bdata, StandardCharsets.UTF_8);
        LOGGER.info(data);
    } 
    catch (IOException e) 
    {
        LOGGER.error("IOException", e);
    }
}

Console
 

$ java -jar target/springbootdemo-0.0.1-SNAPSHOT.jar
 
leftso.com
Java Tutorials Blog

 

原创文章,作者:bd101bd101,如若转载,请注明出处:https://blog.ytso.com/243853.html

(0)
上一篇 2022年4月11日
下一篇 2022年4月11日

相关推荐

发表回复

登录后才能评论