Chemin d'accès absolu du Projet de dossier en Java
Beaucoup de confusion à ce sujet. Plusieurs Questions ont été posées. Les choses semblent encore floues.
Chargeur de classe Absolue, les Chemins de Fichiers, etc etc
Supposons que j'ai un projet de structure de répertoire,
MyProject-- --dist --lib --src --test
J'ai une ressource dire "txtfile.txt" dans "lib/txt" répertoire. Je veux y accéder de manière indépendante du système. J'ai besoin du chemin d'accès absolu du projet.
Donc, je peux code le chemin que abspath+"/lib/Dictionary/txtfile.txt"
Supposons que je fais ce
java.io.File file = new java.io.File(""); //Dummy file
String abspath=file.getAbsolutePath();
- Je obtenir le répertoire de travail actuel qui n'est pas nécessairement la racine du projet.
Suppose que j'execute la finale "prj.jar' de la 'dist' dossier qui contient aussi "lib/txt/txtfile.txt" la structure du répertoire et de ressources,Il doit travailler ici aussi. Je devrais le chemin absolu du dossier dist.
Espère que le problème est clair.
En fait, Java ne se soucie pas du slash les directions, si vous ne pouvez spécifier que les non-lecteurs de racine explicitement depuis
/
points à la racine du disque actuel.Système.getProperty("fichier.séparateur") return "\" pour les environnements Windows et "/" pour Unix et Unix-like).
yep, que est le séparateur de fichiers, mais Java est capable de reconnaître les chemins à l'aide de barres obliques, essayez d'utiliser la prochaine fois vous avez besoin d'un chemin d'accès sur Windows.
OriginalL'auteur Nitish Upreti | 2010-07-09
Vous devez vous connecter pour publier un commentaire.
Vous devez vraiment être à l'aide de getResource() ou getResourceAsStream() à l'aide de votre chargeur de classe pour ce genre de chose. En particulier, ces méthodes à utiliser votre chargeur de classe pour déterminer le contexte de la recherche pour les ressources au sein de votre projet.
Spécifier quelque chose comme
getClass().getResource("lib/txtfile.txt")
afin de ramasser le fichier texte.Pour clarifier les choses: au lieu de penser à comment obtenir le chemin de la ressource, vous devriez penser à l'obtention de la ressource, dans ce cas un fichier dans un répertoire quelque part (éventuellement à l'intérieur de votre POT). Il n'est pas nécessaire de connaître certaines de chemin d'accès absolu dans ce cas, seule une URL pour obtenir le fichier, et le chargeur de classe sera de retour cette URL pour vous. Si vous voulez ouvrir un flux vers le fichier, vous pouvez le faire directement sans déconner avec une URL à l'aide de
getResourceAsStream
.Les ressources que vous essayez d'accéder, par le chargeur de classe doivent être sur le Chemin de Classe (configuré dans le Manifeste de votre fichier JAR). C'est essentiel! Le chargeur de classe utilise le Chemin de Classe pour trouver les ressources, donc si vous n'avez pas assez de contexte dans le Chemin de Classe, il ne sera pas en mesure de trouver quoi que ce soit. Si vous ajoutez
.
le chargeur de classe devrait résoudre quoi que ce soit à l'intérieur ou à l'extérieur du POT en fonction de la façon dont vous référer à la ressource, que vous pouvez certainement être plus précis.Se référant à la ressource préfixé avec un
.
va provoquer le chargeur de classe aussi chercher les fichiers à l'extérieur du POT, tout n'est pas en préfixant le chemin d'accès aux ressources avec une période de diriger le chargeur de classe de seulement regarder à l'intérieur le fichier JAR.Cela signifie que si vous avez un fichier à l'intérieur de le POT dans un répertoire
lib
avec le nomfoo.txt
et vous souhaitez accéder à la ressource, alors vous seriez exécutergetResource("lib/foo.txt");
Si les ressources étaient à l'extérieur du BOCAL vous passerais
getResource("./lib/foo.txt");
J'ai compris le fait qu'elle doit être traitée par le chargeur de classes. mais comment? java.net.URL URL =getClass().getResource("lib/txtfile.txt"); renvoie une valeur null URL pour moi!
Le dossier dist avait un prj.jar + un "lib/txt/txtfile" des ressources. ( ressources expédiées à l'extérieur du pot ) j'ai l'intention de goudron dist dossier à la fin de la distribuer
dans ce cas, vous devez ajouter "." pour le chemin de classe dans le Manifeste pour le POT et l'appel doit être
getResource("lib/txt/txtfile")
J'ai ajouté ce java.net.URL URL=getClass().getClassLoader().getResource("english.txt"); java.net.URL url2 =getClass().getClassLoader().getResource("common-misspells.txt"); où lib/Dictionnaire a été dans mon classpath déjà. sc.initialiser(url.getPath(),url2.getPath()); initialiser avait une bibliothèque méthode que j'ai utiliser. Cela fonctionne lorsque je compile à partir de netbeans, mais le fichier jar dans le dossier dist est toujours pas à trouver les fichiers de dictionnaire(bien qu'ils y sont également présents). Même Le MANIFESTE.MF a inclus : Chemin de Classe: lib/jaspellbin.jar lib/Dictionnaire
OriginalL'auteur Mark Elliot
Tout d'abord, assurez-vous que le répertoire lib est dans votre classpath. Vous pouvez le faire en ajoutant le paramètre de ligne de commande dans votre script de démarrage:
l'enregistrer comme MyProject/start.sh ou n'importe quel os dépendant de script.
Ensuite, vous pouvez accéder à la textfile.txt (comme l'a mentionné à juste titre par la Marque):
OriginalL'auteur naikus
@Mark est correct. C'est de loin la plus simple et la plus robuste approche.
Toutefois, si vous devez vraiment avoir un
File
, alors votre meilleur pari est d'essayer la suivante:Une autre alternative est d'intégrer le projet nom du répertoire dans un script et de le définir comme un système de propriété à l'aide d'une option-D de. Il est également possible d'avoir un script comprendre son propre chemin absolu; par exemple, utiliser
whence
.OriginalL'auteur Stephen C