Tengo un proyecto con 2 paquetes:
tkorg.idrs.core.searchengines
tkorg.idrs.core.searchengines
En el paquete (2) tengo un archivo de texto ListStopWords.txt
, en el paquete (1) tengo una clase FileLoadder
. Aquí está el código en FileLoader
:
File file = new File("properties\\files\\ListStopWords.txt");
Pero tengo este error:
The system cannot find the path specified
¿Puedes dar una solución para solucionarlo? Gracias.
properties.files
a2
?Respuestas:
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 suFileLoader
clase, haga lo siguiente:O si todo lo que buscas en última instancia es en realidad
InputStream
algo:Sin duda, esto es preferible a la creación de un
new File()
porqueurl
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 elFile
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 alimentarInputStream
elload()
método inmediatamente .Nota: cuando intente acceder a él desde el
static
contexto interno , utiliceFileLoader.class
(o lo que seaYourClass.class
) en lugar degetClass()
en los ejemplos anteriores.fuente
FileLoader
es la clase personalizada de OP. Se supone que es exactamente esa clase en la que está intentando obtener el recurso. Así, asíNameOfYourCurrentClass.class.getResourceAsStream(...)
. ElClassLoader.class
fallará si laClassLoader
clase está siendo cargado por un cargador de clases diferentes, lo que puede ocurrir en una aplicación "empresa" con una jerarquía de múltiples cargadores de clases (como una aplicación web Java EE).La siguiente línea se puede utilizar si queremos especificar la ruta relativa del archivo.
fuente
InputStream
?InputStream is = new FileInputStream("./properties/files/ListStopWords.txt");
La ruta relativa funciona en Java usando el. operador.
Entonces, la pregunta es, ¿cómo sabe la ruta en la que está buscando Java actualmente?
haz un pequeño experimento
Observe la salida, llegará a conocer el directorio actual donde está buscando java. Desde allí, simplemente use el operador ./ para ubicar su archivo.
por ejemplo si la salida es
y su archivo está presente en la carpeta MyProject, simplemente use
Espero que esto ayude
fuente
fuente
.class
literal solo proporcionando el nombre completo de su clase.tratar
.\properties\files\ListStopWords.txt
fuente
Podría haber comentado, pero tengo menos reputación por eso. La respuesta de Samrat hizo el trabajo por mí. Es mejor ver la ruta del directorio actual a través del siguiente código.
Simplemente lo usé para rectificar un problema que enfrentaba en mi proyecto. Asegúrese de utilizar ./ para volver al directorio principal del directorio actual.
fuente
Si bien la respuesta proporcionada por BalusC funciona para este caso, se interrumpirá cuando la ruta del archivo contenga espacios porque en una URL, estos se están convirtiendo a% 20, que no es un nombre de archivo válido. Si construye el objeto File usando un URI en lugar de una String, los espacios en blanco se manejarán correctamente:
fuente
Quería analizar 'command.json' dentro de src / main // js / Simulator.java. Para eso, copié el archivo json en la carpeta src y di la ruta absoluta como esta:
fuente
Suponiendo que quiera leer desde el
resources
directorio enFileSystem
clase.Nota:
.
No se necesita liderazgo .fuente
Para mí, en realidad, el problema es que la ruta de clase del objeto File proviene
<project folder path> or ./src
, así que useFile file = new File("./src/xxx.txt");
resolvió mi problemafuente
String basePath = nuevo archivo ("myFile.txt"). GetAbsolutePath (); esta ruta base que puede usar como la ruta correcta de su archivo
fuente
Si está intentando llamar
getClass()
desde un método estático o un bloque estático, puede hacerlo de la siguiente manera.Puede llamar
getClass()
alProperties
objeto en el que está cargando.fuente
Si el archivo de texto no se está leyendo, intente usar una ruta absoluta más cercana (si lo desea, puede usar la ruta absoluta completa) como esta:
suponga que la ruta absoluta es:
fuente