Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 访问编译的jar/war文件之外的文件_Java_Spring Boot - Fatal编程技术网

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

Java 访问编译的jar/war文件之外的文件,java,spring-boot,Java,Spring Boot,我构建了一个SpringBoot应用程序,从网站api获取一些数据,并将响应保存为.json文件(以缓存数据,而不是在每次页面刷新时提取新内容) 然后,我将应用程序打包到一个.jar文件中。但当试图运行它时。每次尝试加载文件时,我都会得到java.io.FileNotFoundException。研究了一下,我需要将.json文件作为流获取。但我也希望在缓存超过5分钟时覆盖该文件。我们还尝试使用maven resources插件重新定位“目标”文件夹根目录下“json”文件夹中的json文件 所

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

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

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


编辑:

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

您可以这样做:

new FileInputStream(new File("file://absolute_path/json/jsonfile.json"));

这方面的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);

你能给我们看看你的文件夹结构吗?(JAR在哪里,JSON在哪里,等等)尝试将编译好的.JAR和JSON文件夹复制到另一个目录,并在控制台上使用
java-JAR your_JAR_name.JAR
运行它,看看它是否有效。@Paschoal我已经尝试过了。我正在mac上使用终端命令运行.jar文件:
java-jar tracker-0.0.1-SNAPSHOT.jar
@Bryde请避免发布文本图像,因为一些用户(包括我自己)可能无法查看它们。更喜欢纯文本。获取.jar文件的绝对路径的好方法是什么?正如我稍后将要将项目移动到服务器。然后路径就会改变。你应该将配置外部化。使用spring,您可以使用外部conf文件()。通过这种方式,您可以为每个安装编辑绝对路径。我的外部文件不是项目本身的配置文件。但是,即使尝试输入文件的绝对路径也不起作用。在尝试读取文件内容之前,我打印了路径,但仍然得到FileNotFoundException。但是如果我复制路径并将
cat
放在路径前面。它会将文件内容打印到终端。您确定应用程序具有读取文件的正确权限吗?您可以尝试将775权限递归设置为json文件夹的临时权限。我的应用程序不是基于.jsp的。所以我甚至不能运行这个解决方案。悲哀地