2012-10-26 3 views
2

Je ne suis pas sûr si je le fais correctement. Je veux avoir un dossier ou un paquet dans mon projet Java qui contient un tas de fichiers texte. Dans le code, je veux lister tous les fichiers dans le dossier, et être capable de les lire. Je veux que ces fichiers de ressources fassent partie de la structure de répertoire de mon projet (pour qu'ils puissent être contrôlés en version avec ma source).Comment empaqueter des fichiers de ressources dans le projet

J'ai vu le ClassLoader. * Les méthodes de ressources mais ne peut pas identifier un dossier dans mes répertoires source et la liste de son contenu ...

BTW je suis en utilisant Eclipse. Est-ce que quelqu'un sait comment atteindre cet objectif?

Merci

========================================= =

MISE à JOUR:

Merci pour les réponses! J'ai trouvé qu'en ajoutant le dossier source, je peux seulement accéder aux dossiers dedans par nom. Cela ne correspond pas à mes besoins, car le contenu du dossier va changer, et je veux être capable de lire tous les contenus de façon dynamique, sans avoir à changer la logique de lecture chaque fois que le contenu change. J'ai essayé de créer un fichier pour un dossier régulier dans le dossier source et d'itérer sur son contenu. Cela fonctionne aussi longtemps que dans Eclipse, mais selon le commentaire d'Edwin, cela ne fonctionnera pas lorsque j'exporterai dans un JAR, donc je suis de retour à la case départ.

Je pense qu'il DOIT y avoir un moyen d'inclure des fichiers de ressources dans mon projet que je peux accéder par programmation (Android le fait et il est basé sur Java à droite?). Y a-t-il une autre façon de créer un paquet 'resources' contenant un tas de fichiers auxquels je peux accéder à l'exécution sans devoir mettre à jour le code pour rechercher chaque fichier? Je ne veux vraiment pas devoir séparer ce dossier de ma source et le maintenir dans un endroit différent car cela compliquera le déploiement ... Est-ce que quelqu'un a des idées?

Merci

====================================

Solution :

Je viens de réaliser qu'Android inventorie ses fichiers de ressources au moment de la compilation afin de les rendre disponibles à l'exécution. Donc, c'est probablement la voie à suivre: je vais ajouter une étape à mon script Ant qui écrit un fichier (toujours nommé le même pour que je puisse y accéder) contenant une liste des fichiers dans mon dossier. De cette façon, je connaîtrai les noms de tous mes fichiers de ressources disponibles. Merci Edwin pour votre aide :)

+0

Lorsque votre projet est déployé, envisagez-vous de regrouper ces fichiers dans le fichier JAR ou de les conserver dans un répertoire distinct? –

+0

cela ne me dérange pas tant que je peux ajouter des fichiers pendant le développement et les lire à l'exécution – noobler

+1

@noobler J'ai peur que votre solution pour utiliser une URL pour créer un objet Fichier ne disparaisse pas une fois que vous empaquetez tout dans un pot ou fichier de guerre. Cela ne fonctionne que si vous pouvez accéder au fichier directement sur votre disque dur, mais il cessera de fonctionner si l'accès nécessite une compression/décompression ou tout autre protocole. –

Répondre

2

Assurez-vous que votre dossier de ressources est un dossier source dans la boîte de dialogue Eclipse Build Path. Ensuite, vous pourrez les charger avec la méthode ClassLoader que vous avez mentionnée dans la question.

enter image description here

Si vous utilisez cette technique, tous les sous-dossiers du dossier source est considéré comme un paquet. Assurez-vous donc de prendre cela en compte lorsque vous chargez la ressource.

Cette technique s'assure que tous les fichiers Java de ce dossier sont compilés et placés dans le dossier de distribution. Et tous les autres fichiers sont simplement copiés de ce dossier dans le dossier de distribution (à savoir le dossier bin ou classes).Plus tard, lorsque vous empaquetez votre projet dans un pot ou une guerre, vous devez vous assurer que ces fichiers sont inclus dans le fichier.

+1

Edwin est sur place. L'ajout du dossier en tant que dossier source consiste essentiellement à l'ajouter au chemin de la classe à la racine. – chrislhardin

+0

@noobler C'est une demande bizarre. En fin de compte, tous vos fichiers seront emballés dans un pot ou une guerre, il est donc impossible de ne pas connaître leurs noms à l'avance. Je pense qu'avec la méthode getResource vous ne pouvez obtenir des ressources que par nom, mais pas par dossier. Pour cette dernière requête, vous devrez peut-être utiliser une JarURLConnection, mais c'est une bête complètement différente. –

Questions connexes