访问已编译的jar / war文件之外的文件

我构建了一个Spring Boot应用程序,该应用程序从网站api获取一些数据,并将响应保存为.json文件(以缓存数据,而不在每次页面刷新时提取新内容)

然后将应用程序打包到一个.jar文件中。但是当尝试运行它时。每次尝试加载文件时,都会得到 java.io.FileNotFoundException 。经过研究,我需要将.json文件作为流获取。但是,当缓存时间超过5分钟时,我也想覆盖文件。还尝试使用maven-resources-plugin将json文件重新放置在“目标”文件夹根目录下的“ JSON”文件夹中。

所以我的问题是:如何从.jar文件所在的根文件夹中的JSON文件夹访问文件?我尝试使用“ ./JSON/file.json”和“ .JSON / file.json”,但都抛出FileNotFoundException异常。

编辑:added file structure of compiled project.

hhuomjk08 回答:访问已编译的jar / war文件之外的文件

您应该始终指定外部资源的绝对路径(在类路径之外)。这是必要的,因为如果您指定相对路径,应用程序将从类路径开始搜索,而不是从包含jar和json文件夹的文件夹开始搜索。

您可以执行以下操作:

hostPort
,

为此的Maven结构为src/main/webapp/,将有一个非公开的WEB-INF/,这是个性化json的好地方:WEB-INF/JSON/(区分大小写)。

要获取Webapp的物理根目录,可以使用servlet上下文或jsf上下文。 ServletContext.getRealPath("/WEB-INF/JSON")。可能以“爆炸”部署战争。

或者,您可以使用Spring允许的外部配置。

默认的模板文件可以存储为资源,并复制到文件系统中。

URL url = getClass().getResource("/data/JSON/new.json");
Path path = Paths.get(url.toURI());
Path path2 = Paths.get(request.getServletContext().getRealPath("/WEB-INF/JSON/untitled.json"));
Files.copy(path,paths2);
本文链接:https://www.f2er.com/3151533.html

大家都在问