Comment mon programme Java peut-il stocker des fichiers dans son fichier .jar?
Je le sais .les fichiers jar sont essentiellement des archives ainsi que des applications. Ce que je demande est de savoir comment puis-je stocker des données(fichiers, pas seulement des chaînes emballé à l'intérieur de mon programme? Je veux faire cela dans mon code Java.
La raison de cette si vous vous demandez, c'est que je suis à la production d'un serveur de mod d'un jeu. Le serveur démarre et crée toutes les données de niveau et je veux stocker tous ces fichiers à l'intérieur de mon .jar app.
source d'informationauteur liamzebedee
Vous devez vous connecter pour publier un commentaire.
Oui, vous peut ce faire.
Non-ressources de code dans un fichier JAR dans le classpath peut être l'accès à l'aide
Class.getResourceAsStream(String)
. Les Applications régulièrement de le faire, par exemple, pour intégrer internationalisation des messages en tant que ressources.Pour obtenir votre fichier dans le fichier JAR, il suffit de le copier dans l'endroit approprié dans le répertoire d'entrée de l'arbre avant d'exécuter la
jar
commande.SUIVI
En théorie, votre demande pourrait de stocker des fichiers à l'intérieur de son propre fichier JAR, sous certaines conditions:
La procédure serait la suivante:
La dernière étape peut ne pas fonctionner si le BOCAL est verrouillé par la JVM /OS. Dans ce cas, vous avez besoin de faire le changement de nom dans un script.
Cependant, je pense que la plupart des gens seraient d'accord que c'est une MAUVAISE IDÉE. Il est plus simple et plus robuste pour juste écrire des fichiers.
Les autres réponses ont fourni quelques bonnes stratégies, mais je vais vous suggérons d'aller dans un sens quelque peu différent.
Ce jeu est censé avoir les graphiques et est une application de bureau. Il est plus facile de distribuer des applications de bureau à partir d'un serveur web.
Si ces deux choses sont vraies de votre jeu, puis regardez dans l'aide Java Web Start à déployer.
JWS propose des Api non disponible pour d'autres applications. & un intérêt particulier à ce problème est l'PersistenceService. Le PersistenceService permet pour de petites quantités de données à stocker et restauré par une application. (même quand il est dans une sablière). J'ai fait une petite la démo. de la PersistenceService.
L'idée serait de vérifier la PersistenceService pour les données de l'application, et si elle ne trouve pas, utiliser les données dans les Pots. Si l'utilisateur/application modifie les données, écrire les données modifiées à la PersistenceService.
JWS offre également d'autres fonctionnalités intéressantes comme des écrans d'accueil, bureau de l'intégration, de mises à jour automatiques..
Ce n'est pas possible. Cependant, vous pouvez rechercher dans des bases de données pour votre cas d'utilisation. Java 6 est livré avec JavaDB. Si vous ne voulez pas l'utiliser, alors vous pouvez trouver plus ici http://java-source.net/open-source/database-engines
Je vous recommande d'envisager d'avoir deux Pots: un pour le stockage de votre application, les fichiers de classe et un autre POT pour stocker les données des utilisateurs. Si vous n'avez pas deux des Pots séparés, alors vous aurez de la difficulté à obtenir un verrou en écriture sur le Système d'Exploitation (puisque vous serait d'essayer de remplacer le BOCAL contenant votre programme alors que java est en lisant).
Pour créer un POT, utilisez le java.util.jar.Jarfiles classe. Il est également une autre question sur stackoverflow qui explique comment créer/écrire un fichier JAR.
Ne pas le faire. Un fichier jar est une source de classes de l'application et des ressources, et non pas un système de fichiers. Vous ne voudriez pas essayer de sauver les fichiers dans un fichier exe, le feriez-vous?
Par la création d'un fichier dans le paquet Source (ex:
/src/resource/file.txt
) son contenu peut être lu à l'aide deClass.getResourceAsStream(String)
C'est un travail de mise en œuvre de la suite de réponse
Je peux confirmer que la procédure expliquée par Stephen fonctionne réellement. Je l'utilise pour les 5 dernières années, avec de légères modifications, je ne copie de pot, puis décharger les classes à partir de l'original pot et de le recharger de nouvelles classes à partir de la copie d'un pot et de faire des modifications d'origine pot, puis répéter la procédure de rechargement.
Si vous travaillez sous Unix/Solaris/Unix, vous n'avez pas de problème avec pot de blocage d'accès, et donc ne devrait pas s'inquiéter ci-dessus. Toutefois, si vous allez accéder à des ressources après les ajouter dans le bocal, puis vous avez besoin de cette classe de rechargement d'affaires.