gpt4 book ai didi

java - 如何构建 jar 工件以便在运行时能够读取打包文件?

转载 作者:太空宇宙 更新时间:2023-11-04 06:33:23 25 4
gpt4 key购买 nike

在运行时应用程序成功将文件存储在项目的根目录中。在 IntelliJ 中执行项目时一切正常,但是当在 Windows 环境中执行由 IntelliJ 构建的 jar 工件时,尽管它们驻留在 jar 文件的根目录中,但在定位/读取文件时却遇到了麻烦。如何解决?

更新我正在使用泽西框架。我从根路径读取文件,如下所示:

package example;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

@Path("/monitor")
public class MonitoringPage {

@GET
@Produces("text/html")
public String getMonitoringPage() throws IOException {

String page, line;
page = "";
BufferedReader br = new BufferedReader(new FileReader("MonitoringPage.htm"));
while((line = br.readLine()) != null){
page += line + "\r\n";
}
br.close();
return page;
}
}

我的 jar 的根目录中有MonitoringPage.htm,但由于某些奇怪的原因找不到它。

我正在使用bat脚本运行jar:

java -jar "Rs.jar"

.

JAVA_HOME=C:\Program Files\Java\jdk1.7.0_51


Path=.......**C:\Program Files\Java\jdk1.7.0_51\bin**

enter image description here

最佳答案

不要将其作为文件系统中的文件读取(就像使用 FileFileReader 或其许多 FileXxx 变体时发生的情况一样)。打包 jar 后,该文件将不再位于您期望的系统文件位置

而是通过 URL 将其作为资源读取。您可以使用:

  • MonitoringPage.class.getResourceAsStream("/MonitoringPage.htm") 将返回 InputStream

从这个InputStream你可以做类似的事情

InputStream is = MonitoringPage.class.getResourceAsStream("/MonitoringPage.htm");
BufferedReader reader = new BufferedReader(new InputStreamReader(is));

注意:这一切都假设您的文件位于类路径的根目录下(从您的图像来看)。路径前面的 / 会将搜索带到类路径的根目录。因此只需使用相对于根目录的文件路径

关于java - 如何构建 jar 工件以便在运行时能够读取打包文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25787874/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com