2013-06-27 2 views
42

Supposons une configuration standard de maven.Comment obtenir le chemin absolu vers le fichier/dossier de ressources de votre projet

Dites dans votre dossier de ressources que vous avez un fichier abc.

En Java, comment puis-je obtenir un chemin absolu vers le fichier?

+0

Voulez-vous écrire un plugin Maven? Ou voulez-vous accéder au fichier lorsque votre programme s'exécute? –

+0

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

Répondre

14

Vous pouvez créer un objet File et utiliser la méthode getAbsolutePath:

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

Un conseil d'utilisation limitée, car il repose sur le répertoire de travail pour être le maven racine. Et même alors, vous devriez plutôt utiliser 'target/classes/abc.txt' pour référencer le fichier, car c'est l'endroit canonique où Maven place les fichiers de ressources après le traitement (par exemple, le plugin maven-resources peut avoir fait une substitution de propriété sur abc.txt). Il est préférable d'utiliser abc.txt via getResource() à partir du classpath. –

+1

Que faire si un utilisateur final exécute votre application en tant que fichier JAR exécutable? Ensuite, il n'y aura pas de fichier physique du tout. C'est une autre raison pour laquelle vous devriez utiliser getResource(), et par exemple. Ouvrez le flux d'entrée en fonction de ce que vous voulez faire avec. –

+4

Est-ce que ceci peut être enlevé comme bonne réponse? @Karol S a répondu ci-dessous - cela devrait être la bonne réponse (d'où la discordance upvote) – DanGordon

104

La bonne façon qui fonctionne réellement:

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

Peu importe maintenant où le fichier dans le classpath est physiquement , il sera trouvé tant que la ressource est en fait un fichier et non une entrée JAR.

(Le travail new File(resource.getPath()) semble évident ne pas tous les chemins! Le chemin est encore codé URL!)

+3

Ou probablement que vous pourriez faire: 'nouveau fichier (resource.toURI()). GetAbsolutePath();' (ie je ne pense pas que vous avez besoin de l'objet Path?) –

+1

Bon conseil sur la toURI(), cela évite que les espaces dans votre chemin sortent en% 20! –

+17

Merci! Cela a presque fonctionné pour moi. Mais j'ai dû faire un changement: YourClass.class.getClassLoader(). GetResource ("abc"); – yngwietiger

11

Vous devez PRECISES chemin a commencé à partir /

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

Créer l'instance classLoader du classe dont vous avez besoin, vous pouvez accéder facilement aux fichiers ou ressources. maintenant vous accédez au chemin en utilisant la méthode getPath() de cette classe.

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