2013-06-27 22 views
42

Presuppone la configurazione standard di Maven.Come ottenere il percorso assoluto per il file nella cartella/risorse nel progetto

Dire nella cartella delle risorse si dispone di un file abc.

In Java, come ottenere il percorso assoluto per il file?

+0

Vuoi scrivere un plug-in Maven? O vuoi accedere al file quando il tuo programma viene eseguito? –

+0

Correlati: http://stackoverflow.com/questions/8136891/getting-absolute-path-of-a-file-loaded-via-classpath – Vadzim

risposta

14

È possibile creare un oggetto File e utilizzare getAbsolutePath metodo:

File file = new File("resources/abc.txt"); 
String absolutePath = file.getAbsolutePath(); 
+5

Un consiglio di uso limitato, poiché si basa sulla directory di lavoro per essere il maven radice. E anche allora, dovresti usare 'target/classes/abc.txt' per fare riferimento al file, dato che questo è il luogo canonico in cui Maven inserisce i file di risorse dopo l'elaborazione (ad esempio, il plugin maven-resources potrebbe aver fatto la sostituzione delle proprietà su abc.txt). È molto meglio usare abc.txt tramite getResource() dal classpath. –

+1

Cosa succede se un utente finale sta eseguendo l'applicazione come un JAR eseguibile? Quindi non ci sarà affatto un file fisico. Questo è un altro motivo per cui dovresti usare getResource(), e ad es. aprire il flusso di input ad esso in base a ciò che si vuole fare con esso. –

+4

Può essere rimosso come risposta corretta? @Karol S ha risposto di seguito - che dovrebbe essere la risposta corretta (quindi la discrepanza di upvote) – DanGordon

104

Il modo corretto che funziona davvero:

URL resource = YourClass.class.getResource("abc"); 
Paths.get(resource.toURI()).toFile(); 

Non importa ora in cui il file nel percorso di classe è fisicamente , verrà trovato finché la risorsa è in realtà un file e non una voce JAR.

(Il apparentemente ovvio new File(resource.getPath()) non funziona per tutti i percorsi! Il percorso è ancora con codifica URL!)

+3

O presumibilmente si potrebbe semplicemente fare: 'nuovo file (resource.toURI()). GetAbsolutePath();' (cioè non penso che sia necessario l'oggetto Path?) –

+1

Buon consiglio circa toURI(), questo evita che spazi nel tuo percorso vengano fuori come% 20! –

+17

Grazie! Questo ha funzionato quasi per me. Ma ho dovuto fare una modifica: YourClass.class.getClassLoader(). GetResource ("abc"); – yngwietiger

11

Devi specifie percorso iniziato da /

URL resource = YourClass.class.getResource("/abc"); 
Paths.get(resource.toURI()).toFile(); 
5

Creare l'istanza del classloader classe di cui hai bisogno, quindi puoi accedere facilmente ai file o alle risorse. ora si accede al percorso usando il metodo getPath() di quella classe.

ClassLoader classLoader = getClass().getClassLoader(); 
String path = classLoader.getResource("chromedriver.exe").getPath(); 
System.out.println(path); 
Problemi correlati