2010-11-12 4 views
0

J'utilise QDox pour analyser les sources Java. J'ai un problème avec cette interface:Obtention du fichier .java à partir du nom du package

import test.Word; 

public interface Spellable { 
    /** 
    * Checks the spell of the word in a given language 
    */ 
    public boolean checkSpell (Word word); 
} 

Au moment de l'analyse syntaxique du type mot que je dois savoir où le chemin dans le système de fichiers est. Alors, y a-t-il un moyen de le savoir?, Peut-être en utilisant le classpath?

+1

Voulez-vous le répertoire en cours, ou le package de la classe? L'emplacement du système de fichiers dépend si c'est dans un fichier jar et où votre chemin de classe est pointé. –

+0

Je veux l'emplacement dans le système de fichiers, la classe Word n'est pas dans un pot. Je ne sais pas comment utiliser le classpath pour l'obtenir. – Federico

Répondre

0

Je ne pense pas qu'il soit possible de le faire d'une manière agréable et 100% -finiment compatible. Java essaie en fait de vous éloigner un peu du système de fichiers grâce au mécanisme de classpath. Néanmoins, vous pouvez généralement obtenir le chemin du fichier via le chargeur de classe. La première étape consiste à obtenir une référence à un chargeur de classe capable de trouver la ressource qui vous intéresse (généralement, le chargeur de classe de l'une de vos propres classes fonctionnera correctement, si vous avez un scénario plus complexe, sachez quel classloader utiliser) .

Ensuite, vous pouvez demander au classloader pour l'emplacement d'une ressource donnée comme une URL, par exemple:

final ClassLoader loader = getClass().getClassLoader(); 
final URL resourceLocation = loader.getResource("com/mycomp/coolapp/checkthis.doc"); 

Maintenant, si vous êtes chanceux, l'URL utilisera le protocole file:/ et décrira un emplacement sur votre système de fichiers local. Si c'est le cas, vous pouvez extraire ce chemin et l'utiliser comme l'emplacement du système de fichiers de la ressource de chemin de classe que vous venez de rechercher. Si ce n'est pas une ressource file:/, la classe peut même pas exister sur votre ordinateur local (par exemple, il est chargé à distance via RMI) de sorte que vous n'avez pas de chance dans tous les cas.

Si cela vous semble compliqué, vous pouvez peut-être passer le répertoire de travail en tant que propriété système à partir de votre script de démarrage Java (par exemple java ... -Dworking.dir=$(pwd)).

+0

Le fichier .java de Word se trouve dans le système de fichiers. Je vais essayer votre code. – Federico

+0

la deuxième ligne que vous avez écrite est null, comment puis-je faire pour ajouter quelque chose au classpath ?, dans ce cas Dois-je ajouter le dossier de test? – Federico

+0

@Federico, Vous devez ajouter le dossier parent du dossier de test au classpath. – rsp

Questions connexes