Java - ImageIO.read elérési útvonal probléma

Java - ImageIO.read elérési útvonal probléma
2018-07-01T16:40:35+02:00
2018-07-01T18:59:00+02:00
2022-10-15T21:41:38+02:00
HorvMi
Sziasztok!

Java-ban ImageIO.read-el kapcsolatban problémába ütköztem. BufferedImage-be szeretnék beolvasni png fájlokat. 
Akkor ha megadom a teljes elérési útvonalat akkor jó, de ez ugyebár nem megfelelő megoldása a problémának, a jar file-ból már nem is működik, illetve azt szeretném hogy az "src" mappából tudja beolvasni és ne kelljen teljes útvonal, tehát hogy univerzális legyen. A fájlok is rendben vannak, a teljes elérési útvonal megadásával működnek.

Itt a kód részlete, itt van mindig a hiba. A first és a second nem jelentheti a problémát, teszteltem többször is a fájl nevének leírásával is.

BufferedImage firsti = ImageIO.read(new File (first + ".png")); BufferedImage secondi = ImageIO.read(new File(second + ".png"));

A fájlokat elhelyeztem az "src", illetve az "src/percent_year" mappába is a kód mellé.

A hibaüzenet:

júl. 01, 2018 4:18:27 DU percent_year.Percent_year main SEVERE: null javax.imageio.IIOException: Can't read input file! at javax.imageio.ImageIO.read(ImageIO.java:1301) at percent_year.Percent_year.numberpng(Percent_year.java:125) at percent_year.Percent_year.main(Percent_year.java:34)

Rengeteget próbálkoztam, kerestem utána a dolognak de egyelőre nincs megoldás. Ez nem működik úgy mint pl egy txt fájl beolvasása, ott működik  a rövid elérési útvonal ami közvetlen az "src" mappából indul.

Előre is köszönöm és várom a válaszokat, sokat segítene. 

Milán
Mutasd a teljes hozzászólást!
File-on keresztül csak a fájlrendszeren közvetlenül elhelyezkedő fájlt tudsz betölteni, tehát mondjuk egy JAR-ba becsomagolt valamilyen fájlt már nem.

Ha neked az kell, hogy ugyanonnan jöjjön a kép, mint ahol a lefordított fájljaid vannak (könyvtárból, JAR fájlból, vagy egyéb forrásból), akkor ahhoz a classloader segítségét kell kérned, méghozzá azét a classloader-ét, ami a te osztályodat is betöltötte. Talán így a legegyszerűbb:

URL imageUrl = ValamiClass.class.getResource("/fajlod/eleresi/utja.png"); BufferedImage image = ImageIO.read(imageUrl);
ahol a ValamiClass valamelyik saját típusod neve (célszerűen annak az osztálynak a neve, amiben maga a kód szerepel).

Ha a getResource()-nak adott elérési utad nem perjellel kezdődik, akkor nem a JAR fájl gyökerétől fogja értelmezni az utat, hanem hozzáveszi a teljesen minősített csomagnevet is. Ha mondjuk a ValamiClass teljes neve com.example.horvmi.ValamiClass, akkor a megadott útvonal elé oda fogja fűzni, hogy "/com/example/horvmi/".
Mutasd a teljes hozzászólást!

Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd