java - 为什么我的 URI 不是分层的?

标签 java maven jar java-7 executable-jar

我在资源文件夹中有文件。例如,如果我需要从资源文件夹中获取文件,我会这样做:

File myFile= new File(MyClass.class.getResource(/myFile.jpg).toURI());             
System.out.println(MyClass.class.getResource(/myFile.jpg).getPath());

我已经测试过并且一切都有效!

路径是

/D:/java/projects/.../classes/X/Y/Z/myFile.jpg

但是,如果我创建 jar 文件,使用 Maven:

mvn package

...然后启动我的应用程序:

java -jar MyJar.jar

我有以下错误:

Exception in thread "Thread-4" java.lang.RuntimeException: ხელმოწერის განხორციელება შეუძლებელია
Caused by: java.lang.IllegalArgumentException: URI is not hierarchical
        at java.io.File.<init>(File.java:363)

...文件的路径是:

file:/D:/java/projects/.../target/MyJar.jar!/X/Y/Z/myFile.jpg

当我尝试从资源文件夹中获取文件时会发生此异常。在这一行。为什么?为什么在 JAR 文件中有这个问题?你怎么看?

还有其他方法,获取资源文件夹路径吗?

最佳答案

你应该使用

getResourceAsStream(...);

当资源被捆绑为 jar/war 或任何其他单个文件包时。

看问题是,一个 jar 是一个包含许多文件的单个文件(有点像 zip 文件)。从 Os 的 pov 来看,它是一个文件,如果您想访问 文件的一部分(您的图像文件),您必须将其用作流。

Documentation

关于java - 为什么我的 URI 不是分层的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18055189/

相关文章:

java - Hibernate:每个具体类的表与每个子类的表

maven - intellij 将 maven-resources-plugin 设置的属性标记为 "cannot resolve symbol"

deployment - JBOss 无法找到类 : Not installing optional component "X" due to exception: java. lang.ClassNotFoundException

java -cp "lib/*"与 java -cp "lib/*.jar"

java - 无论如何在 Java JUnit 测试中模仿或模拟 Linux 命令行

java - 从 OutputStream 获取 BufferedImage

java - 在远程服务器的后台运行 mvn exec

git - 错误 : Unable to access jarfile bfg. jar - BFG

java - 为什么 JDBI 3 @ColumnName 注释不起作用?

java - 如何在 IntelliJ 中运行 Java .jar 文件?错误 - 参数 : archive-name [archive-type]