Confusão sobre o diretório de trabalho atual no método getAbsolutePath de File
O getAbsolutePath do arquivo tem a tendência de que, se um caminho relativo ou apenas o nome do arquivo for fornecido no construtor do arquivo, ele resolverá o caminho absoluto prefixando o diretório de trabalho atual.
A definição do diretório de trabalho atual é o diretório onde executamos nosso programa Java. No meu exemplo, meu programa java reside dentroD:\my-app\src\App.java
Quando eu faço um System.out.println(System.getProperty("user.dir"));
Então, o ideal é imprimir D:\my-app\src
Mas na verdade está imprimindo D:\my-app
Por que é tão?
Respostas
Quando você inicia um aplicativo no IntelliJ, seu diretório de trabalho é definido de acordo com o que está definido em "Diretório de trabalho" na caixa de diálogo "Configurações de execução / depuração" .
Lá, você pode definir o diretório de trabalho com um valor fixo, como D:\my-app\src
. Outra opção é usar uma variável de caminho . A lista de variáveis que estão disponíveis aparentemente pode depender de muitas coisas - abra a caixa de diálogo e veja o que está disponível. Uma opção que vejo é $FileDir$
que imagino ser o diretório do arquivo do código-fonte.
Acho que encontrei a solução. O Intellij estava na verdade causando o problema ao configurar implicitamente a pasta src como a pasta de origem. Eu descobri indo para a configuração do módulo no Intellij. Quando executei o mesmo em um prompt de comando, o diretório de trabalho correto, ou seja, D:\my-app\src\
foi selecionado.