Aunque la solución original para obtener el directorio actual usando empty Stringworks. Pero se recomienda utilizar la user.dirpropiedad para el directorio actual y user.homepara el directorio de inicio.
Path currentPath = Paths.get(System.getProperty("user.dir"));
Path filePath = Paths.get(currentPath.toString(), "data", "foo.txt");
System.out.println(filePath.toString());
salida:
/Users/user/coding/data/foo.txt
De la documentación de la clase Java Path :
Una ruta se considera una ruta vacía si consta únicamente de un elemento de nombre que es empty. Accediendo a un archivo usando un empty path is equivalent to accessing the default directorysistema de archivos.
Por que Paths.get("").toAbsolutePath()funciona
Cuando se pasa una cadena vacía al Paths.get(""), el Pathobjeto devuelto contiene una ruta vacía. Pero cuando llamamos Path.toAbsolutePath(), verifica si la longitud de la ruta es mayor que cero; de lo contrario, usa la user.dirpropiedad del sistema y devuelve la ruta actual.
Aquí está el código para la implementación del sistema de archivos Unix: UnixPath.toAbsolutePath ()
Básicamente, debe crear la Pathinstancia nuevamente una vez que resuelva la ruta del directorio actual.
También sugeriría usar File.separatorCharcódigo independiente de la plataforma.
Path currentRelativePath = Paths.get("");
Path currentDir = currentRelativePath.toAbsolutePath(); // <-- Get the Path and use resolve on it.
String filename = "data" + File.separatorChar + "foo.txt";
Path filepath = currentDir.resolve(filename);
// "data/foo.txt"
System.out.println(filepath);
Salida:
/Users/user/coding/data/foo.txt
filepath.toString()