Obtenha o diretório de trabalho atual em Java

Obtenha o diretório de trabalho atual em Java

1. Visão geral

É uma tarefa fácil obter o diretório de trabalho atual em Java, mas, infelizmente, não há API direta disponível no JDK para fazer isso.

Neste tutorial, aprenderemos como obter o diretório de trabalho atual em Java comjava.lang.System,java.io.File, java.nio.file.FileSystems,ejava.nio.file.Paths.

2. System

Vamos começar com a solução padrão usandoSystem#getProperty, assumindo que nosso nome de diretório de trabalho atual sejaexample em todo o código:

static final String CURRENT_DIR = "example";
@Test
void whenUsingSystemProperties_thenReturnCurrentDirectory() {
    String userDirectory = System.getProperty("user.dir");
    assertTrue(userDirectory.endsWith(CURRENT_DIR));
}

Usamos uma chave de propriedade integrada de Javauser.dir para buscar o diretório de trabalho atual do mapa de propriedade deSystem. Esta solução funciona em todas as versões do JDK.

3. File

Vamos ver outra solução usandojava.io.File:

@Test
void whenUsingJavaIoFile_thenReturnCurrentDirectory() {
    String userDirectory = new File("").getAbsolutePath();
    assertTrue(userDirectory.endsWith(CURRENT_DIR));
}

Aqui, oFile#getAbsolutePath usa internamenteSystem#getProperty para obter o nome do diretório, semelhante à nossa primeira solução. É uma solução não padronizada para obter o diretório de trabalho atual e funciona em todas as versões do JDK.

4. FileSystems

Outra alternativa válida seria usar a nova APIjava.nio.file.FileSystems:

@Test
void whenUsingJavaNioFileSystems_thenReturnCurrentDirectory() {
    String userDirectory = FileSystems.getDefault()
        .getPath("")
        .toAbsolutePath()
        .toString();
    assertTrue(userDirectory.endsWith(CURRENT_DIR));
}

Esta solução usa o novoJava NIO API, e funciona apenas comJDK 7 or higher.

5. Paths

E, finalmente, vamos ver uma solução mais simples para obter o diretório atual usando a APIjava.nio.file.Paths:

@Test
void whenUsingJavaNioPaths_thenReturnCurrentDirectory() {
    String userDirectory = Paths.get("")
        .toAbsolutePath()
        .toString();
    assertTrue(userDirectory.endsWith(CURRENT_DIR));
}

Aqui,Paths#get usa internamenteFileSystem#getPath para buscar o caminho. Ele usa o novoJava NIO API, então esta solução funciona apenas comJDK 7 or higher.

6. Conclusão

Neste tutorial, exploramos quatro maneiras diferentes de obter o diretório de trabalho atual em Java. As duas primeiras soluções funcionam em todas as versões do JDK, enquanto as duas últimas funcionam apenas com JDK7 ou superior.

Recomendamos usar a soluçãoSystem, pois é eficiente e direta, podemos simplificá-la envolvendo esta chamada de API em um método de utilitário estático e acessá-lo diretamente.

O código-fonte para este tutorial está disponívelover on GitHub - é um projeto baseado em Maven, portanto, deve ser fácil de importar e executar como está.