Obtenir le chemin d'accès au répertoire d'un fichier de classe

J'ai été confronté avec le code qui tente de lire certains fichiers de configuration à partir du même répertoire où l' .fichier de classe pour la classe elle-même est:

File[] configFiles = new File(
    this.getClass().getResource(".").getPath()).listFiles(new FilenameFilter() {
        public boolean accept(File dir, String name) {
            return name.endsWith(".xml");
        }
});

Apparemment, cela fonctionne dans certains cas (lors de l'exécution du code à l'intérieur de la Résine, peut-être), mais pour moi, l'exécution de Tomcat, il omet simplement avec NPE, parce que getClass().getResource(".") retourne null.

Un collègue a proposé de créer un autre fichier de configuration contenant une liste de tous ".xml" fichiers de config (qui en effet pourrait fonctionner ici, car il reste assez statique), et que vous ne devriez pas vraiment essayer de faire quelque chose comme ça en Java.

Encore, je me demandais si il n'y a certains belle façon, qui travaille universellement, pour obtenir le chemin d'accès au répertoire dans les cas où une .fichier de classe est situé? Je suppose que vous pourriez obtenir à partir de la chemin de de la .fichier de classe elle-même comme ceci:

new File(this.getClass().getResource("MyClass.class").getPath()).getParent()

... mais est-ce la seule façon la plus propre?

Modifier: Pour clarifier, supposons que nous savoir ce est utilisé dans une application déployée d'une manière telle que MyClass.class sera toujours lu à partir d'un .classe fichier sur le disque, et les ressources y seront dans le même répertoire.

Trouvé cette question: stackoverflow.com/questions/778187/... Son acceptée réponse utilise fondamentalement, ce que j'ai suggéré [ getResource("MyClass.class").getPath() ] ...mais il ne veut pas répondre directement si c'est la seule ou la meilleure façon.

OriginalL'auteur Jonik | 2009-07-27