Les packages Java reflètent la structure du répertoire. Vous pouvez utiliser la classe File. En particulier, voir la méthode listFiles()
.
EDIT
Vous pouvez trouver dynamiquement votre position d'exécution. Voici le code d'un projet sur lequel j'ai travaillé récemment; Je voulais pouvoir trouver le répertoire depuis lequel je cours le JAR (si je cours le JAR), ou bien le répertoire de le JAR si je cours depuis les fichiers de classe. Dans mon cas, mon JAR est en <project root>/bin
et mes cours sont en <project root>/classes
.
final URL location;
final String classLocation = JavaPlanner.class.getName().replace('.', '/') + ".class";
final ClassLoader loader = JavaPlanner.class.getClassLoader();
if(loader == null)
{
try { throw new ClassNotFoundException("class loaded with bootstrap loader"); }
catch (ClassNotFoundException cnfe) { throw new InitializationException(cnfe); }
}
else
{
location = loader.getResource(classLocation);
}
if(location.toString().startsWith("file:/")) // Line 14
{
// Running from .class file
String path;
try { path = URLDecoder.decode(location.toString().substring(6), "UTF-8"); }
catch(UnsupportedEncodingException uee) { throw new InitializationException(uee); }
// Move up package folders to root, add /bin/
File package_ = new File(path).getParentFile();
binPath = package_.getParentFile().getParentFile().getParentFile().getParentFile() + File.separator + "bin" + File.separator;
}
else // Line 25
{
// Running from .jar file
String jarURL = JavaPlanner.class.getResource("/" + JavaPlanner.class.getName().replaceAll("\\.", "/") + ".class").toString();
jarURL = jarURL.substring(4).replaceFirst("/[^/]+\\.jar!.*$", "/");
try
{
File dir = new File(new URL(jarURL).toURI());
jarURL = dir.getAbsolutePath();
}
catch(MalformedURLException mue) { throw new InitializationException(mue); }
catch(URISyntaxException use) { throw new InitializationException(use); }
binPath = jarURL;
}
À la ligne 14, j'ai constaté que j'utilise l'application à partir d'un fichier de classe. String path
est initialement défini sur le chemin du fichier JavaPlanner
(la classe contenant ma méthode main
). Je sais que la structure du paquet est JavaPlanner
, donc j'utilise getParentFile
un nombre approprié de fois pour trouver la racine du projet, puis j'ajoute bin /.
À la ligne 25, j'ai constaté que j'utilise l'application à partir d'un fichier JAR. Le bloc obtient simplement le chemin vers le dossier contenant cet exécutable JAR.
De toute évidence, ce code n'est pas 100% adapté à votre objectif (plus précisément, j'appelle getParentFile
un certain nombre de fois pour ma structure de paquet), mais je pense que cela devrait aider. L'objectif entier du code ci-dessus était de pouvoir trouver les fichiers de ressources corrects pour mon application. Dans la version de production, seul le JAR serait disponible pour l'utilisateur, mais je ne voulais pas avoir à reconstruire le JAR chaque fois que je devrais tester du code, et je ne voulais pas dupliquer mes fichiers de ressources, et Je ne voulais pas polluer mon bin/dossier avec les fichiers de classe (parce que tout dans bin/devait être envoyé à l'utilisateur).
Pourquoi voulez-vous faire? – Maz
Plus de fond: J'ai plusieurs fichiers que je dois faire défiler dans les méthodes de test. Certains fichiers sont dans le paquet Y et d'autres dans le paquet Z. Ce ne sont pas des fichiers de classe, ce sont juste des fichiers de données.Je veux être en mesure de parcourir tous les fichiers du paquet Y et du paquet Z. – Jon