如何在一个简单的Java项目中加载图像?

如何在一个简单的Java项目中加载图像?,java,Java,我在我的项目中有这样的结构: 我的代码是这样的: public class ChapterTwo { public static void main( String[] args ) { try { //File imageFile = new File("../../../../resources/lena.jpg"); String image = ChapterTwo.class.getResource("

我在我的项目中有这样的结构:

我的代码是这样的:

public class ChapterTwo {

    public static void main( String[] args )
    {
        try {
            //File imageFile = new File("../../../../resources/lena.jpg");
            String image = ChapterTwo.class.getResource("resources/lena.jpg").toExternalForm();
            System.out.println(image);
            //MBFImage image = ImageUtilities.readMBF(imageFile);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}
现在这已经让我发疯了。让java在一个简单的目录结构中定位一个映像有多难

我试过:

resources/lena.jpg
/resources/lena.jpg
../resources/lena.jpg
../../../../../resources/lena.jpg
什么都不管用。当我加载文件并调用
exists()
时,它总是返回false。如何加载此图像

PS:我的代码只是测试代码,但你知道,我在尝试各种东西。 它是
com.foo
而不是
com

编辑: 答案如下:

String imagePath = ChapterTwo.class.getClassLoader().getResource("lena.jpg").toExternalForm();
File imageFile = new File(imagePath);
System.out.println(imageFile.exists());

我得到
false

您应该尝试
/../../../../../resources/lena.jpg
,就在当前目录上方三个目录的子目录中。它实际上是com.foo。那么,我应该添加另一个“.”?我在图像层次结构中没有看到任何foo。哪个目录包含foo?这是我的完整路径,src/main/java/com/foo/ch2/ChapterTwo。java不要使用
toExternalForm()
,使用
getPath()
!更新了我的答案。不要使用
toExternalForm()
检查文件是否存在,请使用
getPath()
注意:这是因为您使用maven作为构建工具,它将所有内容都放在类路径的
src/main/resources
中。给定的代码行看起来有点奇怪-通常不会得到类加载器:
getClass().getResource(“/lena.jpg”).toPath()
String image = ChapterTwo.class.getClassLoader().getResource("lena.jpg").getPath();