HOWTO · Java
Obtener el directorio de inicio de usuario en Java
Este artículo le muestra cómo obtener el directorio de inicio del usuario en Java.
En esta página
Use System.getProperty("user.home") de Java para obtener el valor del directorio de inicio como String. Convierta ese valor en Path o File cuando una API necesite un objeto del sistema de archivos. Las variables de entorno como HOME y USERPROFILE son alternativas solo si su aplicación necesita una variable específica y puede gestionar que no esté disponible o tenga una configuración distinta.
Obtenga el directorio de inicio del usuario con System.getProperty("user.home")
user.home es la propiedad del sistema Java destinada a contener el directorio de inicio del usuario actual. System.getProperty() devuelve su valor como una cadena. El valor procede del entorno Java en ejecución: se puede configurar al iniciar la JVM, por lo que quizá no coincida con la ubicación que espera según el sistema operativo. Obtenerlo no comprueba que la ruta exista ni que el proceso pueda acceder a ella.
Ejecute este ejemplo:
El código y las etiquetas o salidas visibles de esta sección se mantienen en inglés.
public class Main {
public static void main(String[] args) {
String home = System.getProperty("user.home");
System.out.println("User home: " + home);
}
}
La ruta impresa depende de la máquina y de la configuración del proceso Java, así que no hay una única ruta de salida válida en todos los casos. El ejemplo imprime el valor de la propiedad; no crea ni examina ningún directorio.
Use el directorio de inicio en operaciones con archivos
Las API del sistema de archivos reciben objetos de ruta cuando necesita resolver rutas secundarias o pasar una ubicación a operaciones con archivos. Convierta la cadena devuelta mediante Path.of(home) en Java 11 o versiones posteriores, o use Paths.get(home) si el proyecto está dirigido a una versión anterior de Java que incluya java.nio.file. La clase File también es una opción para las API que esperan un File.
Por ejemplo, después de obtener home como se indicó antes, Path homePath = Paths.get(home); crea un Path para esa ubicación. Resuelva una ruta secundaria con Path settings = homePath.resolve(".config").resolve("myapp");. Así se unen los componentes de la ruta según las reglas del sistema de archivos predeterminado, en lugar de concatenar cadenas con una barra. Puede pasar el Path resultante a API como Files.newBufferedReader() o Files.createDirectories(), según corresponda. Crear un Path no crea nada en el disco: elija una operación que realice la acción necesaria sobre los archivos y gestione sus errores de E/S.
Si una API existente necesita un File, créelo con new File(home). Use el tipo que acepte la API correspondiente; Path es la opción estándar para el código nuevo que trabaja con el sistema de archivos. Ninguna de las dos conversiones verifica la ubicación ni concede acceso.
Lea HOME o USERPROFILE de las variables de entorno
System.getenv("HOME") y System.getenv("USERPROFILE") leen variables de entorno por nombre, y System.getenv() devuelve un String o null si la variable solicitada no está disponible para el proceso. HOME se usa habitualmente en entornos similares a Unix y USERPROFILE en entornos Windows, pero las aplicaciones, los contenedores, los servicios y las configuraciones de inicio pueden variar. Los nombres y los valores dependen del entorno; no dé por sentado que comprobar el nombre del sistema operativo garantiza que la variable correspondiente exista o señale al directorio deseado.
Si necesita específicamente una de estas variables, compruebe que no sea null antes de convertirla en una ruta o usarla. Decida qué debe hacer la aplicación si falta, por ejemplo, recurrir a user.home o informar de un problema de configuración. Si solo quiere obtener el valor del directorio de inicio configurado para Java, prefiera la propiedad de Java. No imprima todo el entorno para encontrar una variable: podría exponer configuraciones ajenas a la tarea y valores sensibles.
Use Apache Commons IO si ya es una dependencia
Un proyecto que ya incluya Apache Commons IO puede usar FileUtils.getUserDirectory() para obtener un File o FileUtils.getUserDirectoryPath() para obtener una ruta como cadena. Estos métodos de conveniencia no eliminan la necesidad de tener en cuenta el valor proporcionado por el entorno Java, y no justifican añadir una dependencia para esta única consulta. Añada la biblioteca solo si el proyecto ya la utiliza o necesita sus otras utilidades de E/S.
Elija un método y tenga en cuenta sus limitaciones
Para las operaciones habituales de Java con el sistema de archivos, lea user.home con System.getProperty() y conviértalo en Path o File según lo requiera la API que use. Elija System.getenv() solo cuando su aplicación dependa específicamente de una variable de entorno, y gestione la posibilidad de que no esté disponible o tenga un valor personalizado. Use Apache Commons IO si ya forma parte del proyecto y el tipo que devuelve se ajusta a su código.
Considere el valor del directorio de inicio como una ruta inicial, no como prueba de que el directorio exista, tenga permisos de escritura o sea el lugar adecuado para los datos de la aplicación. Compruebe o cree directorios mediante las API del sistema de archivos que requiera la tarea y gestione los errores de E/S documentados. Así se mantiene separada la consulta de la operación sobre el sistema de archivos y se hacen explícitas las suposiciones de la aplicación.