Java语言学习——在Spring Boot中从类路径加载文件
小职 2020-10-12 来源 : 阅读 770 评论 0

摘要:创建Spring Boot Web应用程序时,有时有时需要从类路径中加载文件,本篇介绍在Java语言的学习中,如何在Spring Boot中从类路径加载文件,希望对相关语言的学习有所帮助。

创建Spring Boot Web应用程序时,有时有时需要从类路径中加载文件,本篇介绍在Java语言的学习中,如何在Spring Boot中从类路径加载文件,希望对相关语言的学习有所帮助。

Java语言学习——在Spring Boot中从类路径加载文件

创建Spring Boot Web应用程序时,有时有时需要从类路径中加载文件;war和jar的加载文件格式是不一样的


在下面,您将找到在WAR和JAR中加载文件的解决方案。

 

资源加载器

使用Java,您可以使用当前线程的classLoader并尝试加载文件,但是Spring Framework为您提供了更为优雅的解决方案,例如ResourceLoader。

 

您只需要自动连接ResourceLoader,然后调用getResource(„somePath“)方法即可。

 

在Spring Boot(WAR)中从资源目录/类路径加载文件的示例

在以下示例中,我们从类路径中加载名为GeoLite2-Country.mmdb的文件作为资源,然后将其作为File对象检索。

 

@Service("geolocationservice")

public class GeoLocationServiceImpl implements GeoLocationService {

    private static final Logger LOGGER = LoggerFactory.getLogger(GeoLocationServiceImpl.class);

    private static DatabaseReader reader = null;

    private ResourceLoader resourceLoader;

    @Autowired

    public GeoLocationServiceImpl(ResourceLoader resourceLoader) {

        this.resourceLoader = resourceLoader;

    }    @PostConstruct

    public void init() {

        try {

            LOGGER.info("GeoLocationServiceImpl: Trying to load GeoLite2-Country database...");

            Resource resource = resourceLoader.getResource("classpath:GeoLite2-Country.mmdb");

            File dbAsFile = resource.getFile();            // Initialize the reader

            reader = new DatabaseReader

                        .Builder(dbAsFile)

                        .fileMode(Reader.FileMode.MEMORY)

                        .build();

            LOGGER.info("GeoLocationServiceImpl: Database was loaded successfully.");

        } catch (IOException | NullPointerException e) {

            LOGGER.error("Database reader cound not be initialized. ", e);

        }

    }

    @PreDestroy

    public void preDestroy() {

        if (reader != null) {

            try {

                reader.close();

            } catch (IOException e) {

                LOGGER.error("Failed to close the reader.");

            }

        }

    }

}

在Spring Boot(JAR)中从资源目录/类路径加载文件的示例

如果您想从Spring Boot JAR中的 classpath加载文件,则必须使用该resource.getInputStream()方法将其作为InputStream检索。如果尝试使用resource.getFile()该方法,则会收到错误消息,因为Spring尝试访问文件系统路径,但无法访问JAR中的路径。

 

@Service("geolocationservice")

public class GeoLocationServiceImpl implements GeoLocationService {

    private static final Logger LOGGER = LoggerFactory.getLogger(GeoLocationServiceImpl.class);

    private static DatabaseReader reader = null;

    private ResourceLoader resourceLoader;

    @Inject

    public GeoLocationServiceImpl(ResourceLoader resourceLoader) {

        this.resourceLoader = resourceLoader;

    }    @PostConstruct

    public void init() {

        try {

            LOGGER.info("GeoLocationServiceImpl: Trying to load GeoLite2-Country database...");

            Resource resource = resourceLoader.getResource("classpath:GeoLite2-Country.mmdb");

            InputStream dbAsStream = resource.getInputStream(); // <-- this is the difference

            // Initialize the reader

            reader = new DatabaseReader

                        .Builder(dbAsStream)

                        .fileMode(Reader.FileMode.MEMORY)

                        .build();

            LOGGER.info("GeoLocationServiceImpl: Database was loaded successfully.");

        } catch (IOException | NullPointerException e) {

            LOGGER.error("Database reader cound not be initialized. ", e);

        }

    }

    @PreDestroy

    public void preDestroy() {

        if (reader != null) {

            try {

                reader.close();

            } catch (IOException e) {

                LOGGER.error("Failed to close the reader.");

            }

        }

    }



关注“职坐标在线”公众号,免费获取最新技术干货教程资源哦!

本文由 @小职 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程