栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Spring Boot-使用ResourceLoader读取文本文件

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Spring Boot-使用ResourceLoader读取文本文件

我已经检查了你的代码。如果你想从Spring Boot JAR中的类路径加载文件,则必须使用resource.getInputStream()而不是resource.getFile()。如果你尝试使用resource.getFile( ),你会收到一条错误消息,因为Spring尝试访问文件系统路径,但无法访问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."); }        }    }}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/430283.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号