简体   繁体   中英

Java: Read image from current src directory

I would like to load an image from my current src directory where the java class files are located as well. However, I always get an IOException ..

And how can I make sure the file gets loaded properly on Mac/Linux as well on Windows ?

My code so far:

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 message:

Can't read input file!

(My path is correct - is it because of the space between Google and Drive?)

/Users/myMac/Google Drive/Privat/Programming/Logo_transparent.png

Kind regards and thank you!

I think It's because you didn't create the file, You can create the file if it doesn't exist by using this code

if(!imageFile.exists()) imageFile.createNewFile();

You're code will look like this

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();
}

Also you shouldn't concat child files like that instead pass it as a second argument.

File imageFile = new File(System.getProperty("user.dir"), "Logo_transparent.png");

If your image files will be packaged together with your class files (for example in the same .jar) you should not use File but read it as a resource:

bufferedImage = ImageIO.read(this.getClass().getResourceAsStream("/Logo_transparent.png"));

Notice the '/' before the file name. This means to search in the root path of the classpath. If you specify without / it will search in the package of this (the current class)

this.getClass().getResourceAsStream("Logo_transparent.png")

您可以尝试在此处建立图像的绝对路径,然后再阅读。

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM