¿Cómo leer el archivo de la ruta relativa en el proyecto de Java? java.io.File no puede encontrar la ruta especificada

Tengo un proyecto con 2 paquetes:

  1. tkorg.idrs.core.searchengines
  2. tkorg.idrs.core.searchengines

En el paquete (2) tengo un archivo de texto ListStopWords.txt , en el paquete (1) tengo una clase FileLoadder . Aquí hay un código en FileLoader :

 File file = new File("properties\\files\\ListStopWords.txt"); 

Pero tienes este error:

 The system cannot find the path specified 

¿Puedes dar una solución para arreglarlo? Gracias.

Si ya está en la ruta de clase, solo obténgalo de classpath. No juegue con rutas relativas en java.io.File . Dependen del directorio de trabajo actual sobre el que no tiene ningún control desde el código de Java.

Suponiendo que ListStopWords.txt está en el mismo paquete que la clase FileLoader :

 URL url = getClass().getResource("ListStopWords.txt"); File file = new File(url.getPath()); 

O si lo único que buscas es un InputStream de esto:

 InputStream input = getClass().getResourceAsStream("ListStopWords.txt"); 

Si el archivo es -como lo indica el nombre del paquete- en realidad es un archivo de propiedades completo (que contiene key=value líneas de key=value ) con solo la extensión “incorrecta”, entonces podría alimentarlo de inmediato al método load() .

 Properties properties = new Properties(); properties.load(getClass().getResourceAsStream("ListStopWords.txt")); 

Nota: cuando FileLoader.class acceder desde static contexto static , utiliza FileLoader.class lugar de getClass() en los ejemplos anteriores.

La siguiente línea se puede usar si queremos especificar la ruta relativa del archivo.

 File file = new File("./properties/files/ListStopWords.txt"); 

La ruta relativa funciona en Java usando el. operador.

  • . significa la misma carpeta que el contexto actual.
  • .. significa la carpeta principal del contexto que se está ejecutando actualmente.

Entonces, la pregunta es ¿cómo sabes el camino por el 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 java está buscando. Desde allí, simplemente use el operador ./ para localizar su archivo.

por ejemplo, si la salida es

G: \ JAVA8Ws \ MyProject \ content.

y su archivo está presente en la carpeta MyProject simplemente use

 File resourceFile = new File("../myFile.txt"); 

Espero que esto ayude

  InputStream in = FileLoader.class.getResourceAsStream(""); try { BufferedReader reader=new BufferedReader(new InputStreamReader(in)); String line=null; while((line=reader.readLine())!=null){ System.out.println(line); } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } 

try .\properties\files\ListStopWords.txt

Si bien la respuesta proporcionada por BalusC funciona para este caso, se romperá 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 utilizando un URI en lugar de una Cadena, los espacios en blanco se manejarán correctamente:

 URL url = getClass().getResource("ListStopWords.txt"); File file = new File(url.toURI()); 

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 de esta manera:

 Object obj = parser.parse(new FileReader("./src/command.json")); 

Si está intentando llamar a getClass() desde el método estático o al locking estático, puede hacerlo de la siguiente manera.

Puede llamar a getClass() en el objeto Properties en el que está cargando.

 public static Properties pathProperties = null; static { pathProperties = new Properties(); String pathPropertiesFile = "/file.xml; InputStream paths = pathProperties.getClass().getResourceAsStream(pathPropertiesFile); } 

Si el archivo de texto no se está leyendo, intente utilizar una ruta absoluta más cercana (si lo desea, puede usar la ruta absoluta completa) de esta manera:

 FileInputStream fin=new FileInputStream("\\Dash\\src\\RS\\Test.txt"); 

supongamos que la ruta absoluta es:

 C:\\Folder1\\Folder2\\Dash\\src\\RS\\Test.txt