Al fin luego de tanto luchar hemos encontrado la respuesta de este dilema que ciertos los usuarios de este espacio presentan. Si quieres aportar algún dato no dudes en compartir tu conocimiento.
Solución:
Si ya está en el classpath, simplemente obténgalo del classpath en lugar del sistema de archivos del disco. No juegues con rutas relativas en java.io.File
. Dependen del directorio de trabajo actual sobre el que no tiene ningún control desde el interior del código Java.
Asumiendo que ListStopWords.txt
está en el mismo paquete que su FileLoader
clase, luego haz:
URL url = getClass().getResource("ListStopWords.txt");
File file = new File(url.getPath());
O si todo lo que busca en última instancia es en realidad un InputStream
de eso:
InputStream input = getClass().getResourceAsStream("ListStopWords.txt");
Esto es ciertamente preferible a crear un new File()
porque el url
no necesariamente representa una ruta del sistema de archivos del disco, pero también podría representar la ruta del sistema de archivos virtual (lo que puede suceder cuando el JAR se expande a la memoria en lugar de a una carpeta temporal en el sistema de archivos del disco) o incluso una ruta de red que no son ambas. por definición digerible por File
constructor.
Si el archivo es -como sugiere el nombre del paquete- es Realmente un archivo de propiedades completo (que contiene key=value
líneas) con solo la extensión “incorrecta”, entonces podría alimentar el InputStream
inmediatamente a la load()
método.
Properties properties = new Properties();
properties.load(getClass().getResourceAsStream("ListStopWords.txt"));
Nota: cuando intenta acceder desde adentro static
contexto, luego use FileLoader.class
(o lo que sea YourClass.class
) en lugar de getClass()
en los ejemplos anteriores.
La ruta relativa funciona en Java usando el . operador.
- . significa la misma carpeta que el contexto que se está ejecutando actualmente.
- .. significa la carpeta principal del contexto que se está ejecutando actualmente.
Entonces, la pregunta es ¿cómo sabe la ruta en la que Java está buscando actualmente?
haz un pequeño experimento
File directory = new File("./");
System.out.println(directory.getAbsolutePath());
Observe la salida, llegará a conocer el directorio actual donde está buscando Java. A partir de ahí, simplemente use el operador ./ para ubicar su archivo.
por ejemplo, si la salida es
G:JAVA8WsMiProyectocontenido.
y su archivo está presente en la carpeta MyProject simplemente use
File resourceFile = new File("../myFile.txt");
Espero que esto ayude
La siguiente línea se puede utilizar si queremos especificar la ruta relativa del archivo.
File file = new File("./properties/files/ListStopWords.txt");
Reseñas y calificaciones
Si crees que ha sido de utilidad este artículo, sería de mucha ayuda si lo compartieras con más entusiastas de la programación de esta manera contrubuyes a difundir este contenido.