Confusão sobre o diretório de trabalho atual no método getAbsolutePath de File

Aug 16 2020

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

1 Joni Aug 16 2020 at 15:33

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.

Sandy Aug 16 2020 at 15:29

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.