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á.