2010-09-29 3 views
0

Mon programme Java fait référence à de nombreux fichiers de données. Je les ai placés dans un répertoire de niveau supérieur appelé data /, avec src/et bin /. Dans Eclipse, les références à data/et ../data/ semblent fonctionner. Quand je l'exécute à partir de la ligne de commande, seulement ../data/ fonctionne. Lorsque je place le bin/et les données/répertoires dans un pot et que je définis correctement le point d'entrée, il ne semble pas savoir que je veux qu'il accède au répertoire/data à l'intérieur du le pot. La seule façon de le faire fonctionner est de définir les références à ../data/ et de placer le fichier jar dans le répertoire bin. Cela ne me fait évidemment pas du bien, parce que ce n'est pas autonome.référençant des fichiers de données dans des bocaux

Que dois-je faire pour que les références fonctionnent?

Merci

Répondre

3

Je vous recommande d'accéder aux fichiers d'une manière classpath-relative, que ce soit dans Eclipse ou dans un JAR compilé.

Il y a quelques façons dont vous pourriez prendre, mais une approche JDK seule base serait d'utiliser la méthode de classe getResourceAsStream(), vous donnant accès à un objet InputStream que vous pouvez lire.

1

Si vos ressources sont dans un fichier jar, pensez à utiliser cette méthode pour les lire:

class Class { 
    InputStream getResourceAsStream(String name) 
} 

cette recherche le rapport des ressources à une classe (qui peut être dans un bocal), plutôt que par rapport au répertoire de travail.

-1

Merci de m'avoir indiqué ce chemin, les gars. J'ai fini par faire une solution de contournement vraiment piratée parce que je ne suis pas encore très bon avec IO. Je getClass() pour construire une URL:

http://forums.sun.com/thread.jspa?threadID=5258488

a ensuite fait un nouvel objet fichier de cette chaîne (new File (fichier)):.

fichier String = url.toString() replaceFirst ("fichier:", ""); Cela m'a permis de conserver le même code que celui référencé par les objets du fichier.

+0

Éditer: cela ne fonctionnera pas avec les pots. Voir: http://forum.springsource.org/archive/index.php/t-65452.html Apparemment, je devrais refaire tout mon code centré sur les fichiers (objets Scanner, etc.) pour travailler avec des URL ou le semblable. Ah, oh bien. – walrus

+0

Je recommande chaudement d'utiliser 'Class # getResource()'/'getResourceAsStream()' au lieu de tirer/pirater/tripoter dans le noir comme ça. – BalusC

Questions connexes