如何在一个简单的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();