[英]Using file from within JAR, while runnig app from jar
我正在尝试使用文件,将应用程序作为 JAR 运行时。 当我通过 Intelij 运行应用程序时,一切都很好。 但是,当我尝试通过 jar 运行它时,我无法访问该文件。 我尝试阅读一些包含类似问题的主题,但没有一个有帮助(例如从 jar 中读取资源文件或如何从 Java Z68995FCBF432492D15484D04A9D2AC4 中读取资源文件和0 目标树文件? )
当我使用
String path = String
.join("", "classpath:static\assets\config\", fileName);
File file = ResourceUtils.getFile(path);
InputStream targetStream = new FileInputStream(file)
在 intelij 运行期间,一切正常。
在 jar 的情况下,我试过:
String path = String
.join("", "static\assets\config\", fileName).replace("\\","/")).toExternalForm();
String path2 = String
.join("", "static\assets\config\", fileName).replace("\\","/")).getFile();
String path3 = String
.join("", "static\assets\config\", fileName).replace("\\","/")).getPath();
和许多其他。 它们导致正确的路径,例如:
file:/D:/Projects/myProject/target/classes/static/assets/config/fileName(在 toExternalForm 的情况下)
/D:/Projects/myProject/target/classes/static/assets/config/fileName(在 getFile 的情况下)
但是,当我尝试时,所有这些都会导致 null InputStream:
InputStream in = getClass().getResourceAsStream(everyPath);
我收到一个错误: java.io.FileNotFoundException: D:\Projects\myProject\target\project-app-1.0.jar\BOOT-INF\classes\static\assets\config\fileName (The system cannot find the path specified)
当我通过 7zip 打开它时 project-app-1.0.jar 中的路径正是: D:\Projects\myProject\target\project-app-1.0.jar\BOOT-INF\classes\static\assets\config\fileName
这就是我的资源处理程序的样子:
private static final String[] CLASSPATH_RESOURCE_LOCATIONS = {
"classpath:/resources/", "classpath:/static/"};
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/**").addResourceLocations(
CLASSPATH_RESOURCE_LOCATIONS);
}
当您想在 jar 中使用某些东西时,忘记“文件”,它只是一个简单的“资源”,您必须与 getResource 一起使用。
如果您使用标准打包系统,“resources”文件夹中的所有内容都放在 JAR 的根目录下,因此如果您想读取“static\assets\config\”文件夹中的“foo.txt”文件,您必须这样做使用方法:
InputStream in = ClassLoader.getSystemResourceAsStream("static/assets/config/foo.txt");
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.