在 JAR 资源中向上一级



我有以下包层次结构:

base--images--img.png
|
--code--Foo.java
|
--Base.java

也就是说,我有一个包base它有 2 个子包,base.imagesbase.code每个子包都有各自的文件。Base.java只是在Foo中调用一个方法。

当我构建时,所有这些都捆绑到base.jar中。

问题:无论罐子位于何处或从何处运行Foo.java如何加载img.png

我尝试过的一些事情:

new File("../images/img.png")
Foo.class.getResource("../images/img.png")

这些都不起作用,因为"../images/img.png"追加到运行 JAR 的路径,而不是类的路径。


女工程师:

在福.java:

package base.code;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.net.URL;
import javax.imageio.ImageIO;
public class Foo {
public static void main(String[] args) {
URL url = Foo.class.getResource("/graphs/1.png");
try {
BufferedImage img = ImageIO.read(url);
} catch (IOException e) {
System.err.println("Image not found!");
}
}
} 

在底座中.java:

package base;
public class Base {
public static void main(String[] args)
Foo.main(args);
}
}

资源位于类路径上,切勿使用文件。它们可能存储在罐子中(zip 格式(。

解决方案只是使用绝对路径。这比类包的相对路径更清楚。

Foo.class.getResource("/base/images/img.png")

最新更新