Esta es la solución más acertada que encomtrarás brindar, sin embargo estúdiala detenidamente y valora si es compatible a tu proyecto.
Solución:
No puedes hacer esto
File src = new File(resourceUrl.toURI()); //ERROR HERE
no es un archivo! Cuando ejecuta desde el ide, no tiene ningún error, porque no ejecuta un archivo jar. En el IDE, las clases y los recursos se extraen en el sistema de archivos.
Pero puedes abrir un InputStream
De este modo:
InputStream in = Model.class.getClassLoader().getResourceAsStream("/data.sav");
Eliminar "/resource"
. En general, los IDE se separan en clases y recursos del sistema de archivos. Pero cuando se crea el frasco, se juntan todos. Así que el nivel de carpeta "/resource"
se utiliza sólo para la separación de clases y recursos.
Cuando obtiene un recurso del cargador de clases, debe especificar la ruta que tiene el recurso dentro del contenedor, esa es la jerarquía real del paquete.
Si por alguna razón realmente necesita crear un java.io.File
object para apuntar a un recurso dentro de un archivo Jar, la respuesta está aquí: https://stackoverflow.com/a/27149287/155167
File f = new File(getClass().getResource("/MyResource").toExternalForm());
Aquí hay una solución para los desarrolladores de Eclipse RCP / Plugin:
Bundle bundle = Platform.getBundle("resource_from_some_plugin");
URL fileURL = bundle.getEntry("files/test.txt");
File file = null;
try
URL resolvedFileURL = FileLocator.toFileURL(fileURL);
// We need to use the 3-arg constructor of URI in order to properly escape file system chars
URI resolvedURI = new URI(resolvedFileURL.getProtocol(), resolvedFileURL.getPath(), null);
File file = new File(resolvedURI);
catch (URISyntaxException e1)
e1.printStackTrace();
catch (IOException e1)
e1.printStackTrace();
Es muy importante usar FileLocator.toFileURL(fileURL)
en vez de resolve(fileURL)
, porque cuando el complemento se empaqueta en un contenedor, esto hará que Eclipse cree una versión desempaquetada en una ubicación temporal para que se pueda acceder al objeto mediante Archivo. Por ejemplo, supongo que Lars Vogel tiene un error en su artículo: http://blog.vogella.com/2010/07/06/reading-resources-from-plugin/
Reseñas y calificaciones
Si eres capaz, tienes la libertad de dejar una sección acerca de qué le añadirías a esta noticia.