假设有一个jar包,里面有一个test.txt,里面有一行字符串123abc
,现在要在一个以jar命令运行的spring-boot项目环境中读取,要怎么做?
分两种情况:
- jar包在项目外
- jar包在项目内
假设把这个jar包,一个放到D盘的test目录下,一个放到spring-boot项目resources目录下的lib子目录里,可以使用以下两种方法分别读取:
@SpringBootApplication
public class DemoApplication {
private static final Logger logger = LoggerFactory.getLogger(DemoApplication.class);
public static void main(String[] args) throws IOException {
SpringApplication.run(DemoApplication.class, args);
var outerUrl = new URL("jar", null, -1, "file:/D:/test/test-1.0-SNAPSHOT.jar!/test.txt");
var innerUrl = DemoApplication.class.getClassLoader().getResource("lib/test-1.0-SNAPSHOT.jar!/test.txt");
logger.info("outerStr:{} and innerStr:{}", new String(outerUrl.openStream().readAllBytes()),
new String(innerUrl.openStream().readAllBytes()));
}
}
使用mvn clean package打包项目,然后使用java -jar xxx.jar执行该项目文件,观察日志文件就会发现,两种方式都成功了:
image.png
网友评论