Mesmo que a solução original para obter o diretório atual usando as empty String
obras. Mas é recomendado usar a user.dir
propriedade para o diretório atual e user.home
para o diretório inicial.
Path currentPath = Paths.get(System.getProperty("user.dir"));
Path filePath = Paths.get(currentPath.toString(), "data", "foo.txt");
System.out.println(filePath.toString());
resultado:
/Users/user/coding/data/foo.txt
Da documentação da classe Java Path :
Um caminho é considerado um caminho vazio se consistir apenas em um elemento de nome, ou seja empty
. Acessando um arquivo usando um empty path is equivalent to accessing the default directory
do sistema de arquivos.
Porque Paths.get("").toAbsolutePath()
funciona
Quando uma string vazia é passada para o Paths.get("")
, o Path
objeto retornado contém o caminho vazio. Mas quando chamamos Path.toAbsolutePath()
, ele verifica se o comprimento do caminho é maior que zero, caso contrário, ele usa a user.dir
propriedade do sistema e retorna o caminho atual.
Aqui está o código para a implementação do sistema de arquivos Unix: UnixPath.toAbsolutePath ()
Basicamente, você precisa criar a Path
instância novamente depois de resolver o caminho do diretório atual.
Também gostaria de sugerir o uso File.separatorChar
de código independente de 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);
Resultado:
/Users/user/coding/data/foo.txt
filepath.toString()