Confusión sobre el directorio de trabajo actual en el método getAbsolutePath de File

Aug 16 2020

El getAbsolutePath del archivo tiene la tendencia de que si se proporciona una ruta relativa o solo el nombre del archivo en el constructor del archivo, resolverá la ruta absoluta prefijando el directorio de trabajo actual.

La definición de directorio de trabajo actual es el directorio donde ejecutamos nuestro programa Java. En mi ejemplo, mi programa Java reside dentroD:\my-app\src\App.java

Cuando hago un System.out.println(System.getProperty("user.dir"));

Entonces idealmente debería imprimir D:\my-app\src

Pero en realidad está imprimiendo D:\my-app

¿Por que es esto entonces?

Respuestas

1 Joni Aug 16 2020 at 15:33

Cuando inicia una aplicación desde IntelliJ, su directorio de trabajo se establece de acuerdo con lo que se establece en "Directorio de trabajo" en el cuadro de diálogo "Ejecutar / Depurar configuraciones" .

Allí, puede establecer el directorio de trabajo en un valor fijo como D:\my-app\src. Otra opción es utilizar una variable de ruta . La lista de variables que están disponibles aparentemente puede depender de muchas cosas: abra el cuadro de diálogo y vea qué hay disponible. Una opción que veo es la $FileDir$que imagino que sería el directorio del archivo de código fuente.

Sandy Aug 16 2020 at 15:29

Creo que encontré la solución. Intellij en realidad estaba causando el problema al establecer implícitamente la carpeta src como la carpeta de origen. Lo encontré yendo a la configuración del módulo dentro de Intellij. Cuando ejecuté lo mismo desde un símbolo del sistema, D:\my-app\src\se selecciona el directorio de trabajo correcto, es decir .