Si ya está en la ruta de clases, simplemente obténgalo de la ruta de clases en lugar del sistema de archivos del disco. No juegues con las rutas relativas java.io.File
. Dependen del directorio de trabajo actual sobre el que no tiene ningún control desde el interior del código Java.
Suponiendo que ListStopWords.txt
esté en el mismo paquete que su FileLoader
clase, haga lo siguiente:
URL url = getClass().getResource("ListStopWords.txt");
File file = new File(url.getPath());
O si todo lo que buscas en última instancia es en realidad InputStream
algo:
InputStream input = getClass().getResourceAsStream("ListStopWords.txt");
Sin duda, esto es preferible a la creación de un new File()
porque url
puede que no represente necesariamente 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 en la memoria en lugar de en una carpeta temporal en el sistema de archivos del disco) o incluso una ruta de red que, por definición, no puede digerirse por el File
constructor.
Si el archivo -como sugiere el nombre del paquete- es en realidad un archivo de propiedades completo (que contiene key=value
líneas) con la extensión "incorrecta", entonces puede alimentar InputStream
el load()
método inmediatamente .
Properties properties = new Properties();
properties.load(getClass().getResourceAsStream("ListStopWords.txt"));
Nota: cuando intente acceder a él desde el static
contexto interno , utilice FileLoader.class
(o lo que sea YourClass.class
) en lugar de getClass()
en los ejemplos anteriores.
properties.files
a2
?