学习使用ClassPathResource和ResourceLoader类从 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/tech/pnotes/243853.html