Solución:
Para leer un archivo .jpg desde una ruta no relativa, puede usar esto:
BufferedImage img = null;
try
{
img = ImageIO.read(new File("C:/ImageTest/pic2.jpg")); // eventually C:\ImageTest\pic2.jpg
}
catch (IOException e)
{
e.printStackTrace();
}
No tengo ningún entorno Java en este momento, así que espero que funcione y esté escrito correctamente.
getResource
Y getResourceAsStream
no funcionan con rutas de archivo, sino rutas relativas a la base del código. Si el código base es C:
entonces una ruta relativa que ubicaría el recurso es /ImageTest/pic2.jpg
.
..diferencia entre cargar archivo por
FileInputStream
ygetResourceAsStream
?
Una diferencia importante es que el getResource..
funcionará con un recurso dentro de un Jar, que ya no es un File
. Por lo tanto FileInputStream
no poder utilizarse para acceder a dicho recurso.
No se puede utilizar Class#getResource(String)
o Class#getResourceAsStream(String)
en este caso. Las reglas para buscar recursos asociados con una clase determinada son implementadas por el cargador de clases que define la clase. Este método delega al cargador de clases de este objeto. Si este objeto fue cargado por el cargador de clases de arranque, el método delega a ClassLoader.getSystemResourceAsStream(java.lang.String)
.
Antes de la delegación, se construye un nombre de recurso absoluto a partir del nombre de recurso dado utilizando este algoritmo:
Si el nombre comienza con un /
(u002f
), el nombre absoluto del recurso es la parte del nombre que sigue al /
. De lo contrario, el nombre absoluto tiene la siguiente forma: nombre_paquete_modificado / nombre
Donde el nombre_paquete_modificado es el nombre del paquete de este objeto con /
sustituido para .
(u002e
).
Generalmente, no es bueno codificar la ubicación del sistema de sus recursos en su código. La forma ordenada y limpia es poner sus recursos en su classpath y acceder a ellos. Espero que esto aclare por qué no está funcionando