gpt4 book ai didi

java - JAR 资源上一级

转载 作者:行者123 更新时间:2023-12-02 11:16:18 29 4
gpt4 key购买 nike

我有以下包层次结构:

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

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

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

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

我尝试过的一些事情:

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

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

<小时/>

MWE:

在 Foo.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!");
}
}

}

在 Base.java 中:

package base;

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

最佳答案

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

解决方案很简单,使用绝对路径。这比类包的相对路径更清晰。

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

关于java - JAR 资源上一级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50256599/

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