我也想从java class文件所在的当前src目录中加载图像。但是,我总是得到 IOException
..
又如何确保文件在 Mac / Linux和Windows 上正确加载?
到目前为止,我的代码:
String dir = System.getProperty("user.dir") + "/Logo_transparent.png";
File imageFile = new File(dir);
BufferedImage bufferedImage = null;
try {
bufferedImage = ImageIO.read(imageFile);
} catch (IOException e) {
System.out.println(e.getMessage());
System.out.println(dir);
System.out.println();
}
IOException消息:
无法读取输入文件!
(我的路径正确-是因为Google和云端硬盘之间的空间吗?)
/ Users / myMac / Google云端硬盘/Privat/Programming/Logo_transparent.png
致以问候,谢谢!
答案 0 :(得分:0)
我认为这是因为您没有创建文件,如果不存在此文件,则可以使用此代码来创建文件
if(!imageFile.exists()) imageFile.createNewFile();
您的代码将如下所示
String dir = System.getProperty("user.dir") + "/Logo_transparent.png";
File imageFile = new File(dir);
BufferedImage bufferedImage = null;
try {
if(!imageFile.exists()) imageFile.createNewFile();
bufferedImage = ImageIO.read(imageFile);
} catch (IOException e) {
System.out.println(e.getMessage());
System.out.println(dir);
System.out.println();
}
此外,您不应该像这样连接子文件,而是将其作为第二个参数传递。
File imageFile = new File(System.getProperty("user.dir"), "Logo_transparent.png");
答案 1 :(得分:0)
如果图像文件将与类文件打包在一起(例如在同一个.jar中),则不应使用File,而应将其作为资源阅读:
bufferedImage = ImageIO.read(this.getClass().getResourceAsStream("/Logo_transparent.png"));
在文件名前注意'/'。这意味着要搜索类路径的根路径。 如果您指定不带/,它将在这个(当前类)的包中搜索
this.getClass().getResourceAsStream("Logo_transparent.png")
答案 2 :(得分:-1)
您可以尝试建立here之类的图片的绝对路径,然后再读取。