Confusione sulla directory di lavoro corrente nel metodo getAbsolutePath di File

Aug 16 2020

Il getAbsolutePath del file ha la tendenza che se nel costruttore del file viene fornito un percorso relativo o solo il nome del file, risolverà il percorso assoluto anteponendo la directory di lavoro corrente.

La definizione della directory di lavoro corrente è la directory in cui eseguiamo il nostro programma Java. Nel mio esempio, il mio programma java risiede all'internoD:\my-app\src\App.java

Quando faccio un file System.out.println(System.getProperty("user.dir"));

Quindi dovrebbe idealmente stampare D:\my-app\src

Ma in realtà sta stampando D:\my-app

Perché è così?

Risposte

1 Joni Aug 16 2020 at 15:33

Quando si avvia un'applicazione da IntelliJ, la sua directory di lavoro viene impostata in base a quanto impostato in "Directory di lavoro" nella finestra di dialogo "Esegui / Debug Configurazioni" .

Qui puoi impostare la directory di lavoro su un valore fisso come D:\my-app\src. Un'altra opzione è usare una variabile di percorso . L'elenco delle variabili disponibili apparentemente può dipendere da molte cose: apri la finestra di dialogo e guarda cosa è disponibile. Un'opzione che vedo è $FileDir$che immagino sarebbe la directory del file del codice sorgente.

Sandy Aug 16 2020 at 15:29

Penso di aver trovato la soluzione. Intellij stava effettivamente causando il problema impostando implicitamente la cartella src come cartella di origine. L'ho trovato andando alle impostazioni del modulo all'interno di Intellij. Quando ho eseguito lo stesso da un prompt dei comandi, D:\my-app\src\viene selezionata la directory di lavoro corretta, ovvero .