2010-10-14 4 views
2

J'essaie d'obtenir le chemin d'accès à un fichier qui se trouve hors du java jar et je ne veux pas utiliser un chemin absolu . Un exampel: disons que le jar est situé dans ~/lib/myjar.jar et que le fichier se trouve dans le même dossier. Ce que j'ai essayer quelque chose comme ça, mais il échoue:Comment obtenir un chemin d'accès à une ressource/fichier à partir d'un fichier Java JAR

File myfile = new File(this.getClass().getResource("../../../").toURI()); 

Note: mon colis est com.contro.gui, voilà pourquoi je « ../../../ », pour pour accéder à la "racine"

Je ne sais pas comment accéder au fichier. Toute suggestion?? Et qu'en est-il si le fichier auquel je veux accéder est dans un autre dossier comme ~/res/???

Répondre

4

Si le fichier est dans le même répertoire que le pot, je pense que cela va fonctionner (assez hacky se sent, mais ...):

URL url = getClass().getProtectionDomain().getCodeSource().getLocation(); 
File myfile = new File(url.toURI()); 
File dir = myfile.getParentFile(); // strip off .jar file 

(ai pas testé, mais il semble possible (Ne fonctionnera qu'avec des fichiers jar bien sûr).

Si le fichier est dans un emplacement aléatoire, je pense que vous devrez passer des paramètres ou vérifier les emplacements "connus" comme user.home. (Ou bien, vous pouvez toujours placer le fichier dans le pot une utilisation getResource().)

+0

Parfait !! Cela a fonctionné comme prévu! Merci beaucoup! Je me cassais la tête en essayant des millions d'options. Une seule modification ... au lieu de "myfile.getParent()", il s'agit de "myfile.getParentFile()" – testk

+0

Note d'un côté: je ressemble à ce que j'ai posté, cela fonctionne si vous avez le bon classpath. Mais ta solution c'est mieux. Merci! – testk

+0

@testk: Pas de problème. (Mise à jour pour corriger le code) – Ash

0

Non juste faire

 File FileName = new File("."); 
    String Directory = FileName.getCanonicalPath(); 

que vous obtiendrez le répertoire parent de votre classe dans un fichier ou un bocal souvenez-vous de définir le répertoire si c'est dans un pot comme ceci "NameOfJar \ NameOfFolder \ etc"

Questions connexes