Comment une application peut-elle utiliser des fichiers à l'intérieur du pot pour lire et écrire?

j'ai besoin de stocker des données dans les fichiers à l'intérieur .jar fichier et le lire à nouveau.

je sais que je peux utiliser Class.getResourceAsStream() méthode mais il retourne un InputStream que je peux lire à partir. Mais je cherche un moyen d'écrire .

31
demandé sur informatik01 2011-02-19 20:23:59

5 réponses

j'ai besoin de stocker des données dans les fichiers à l'intérieur .jar fichier et le lire à nouveau

Non.

au lieu de stocker le fichier' default ' dans le Jar. S'il est modifié, conservez le fichier modifié à un autre endroit. Un lieu commun est un sous-répertoire de user.home . Lors de la vérification des fichiers, vérifiez d'abord l'existence d'une altération de fichier sur le système de fichiers, et si elle n'existe pas, chargez le fichier par défaut.


il est généralement préférable de décrire l'objectif plutôt que la stratégie. "Enregistrer le fichier modifié dans le Bocal' est une stratégie, alors que le "Enregistrer les préférences entre les courses' pourrait être le but.

Related: qu'est-Ce que le XY problème?

93
répondu Andrew Thompson 2018-01-09 01:13:31

ce n'est pas vraiment supporté. En principe, vous pouvez utiliser le fichier jar, mais il n'y a aucune garantie que le nouveau contenu soit correctement chargé. Laissez vos outils de construction gérer le fichier jar -- et choisissez autre chose pour le stockage persistant géré par votre programme lui-même. Comme un fichier.

3
répondu Vance Maverick 2011-02-19 17:26:25

il est peu probable que vous puissiez changer un bocal chargé en toute sécurité. Le changer alors qu'il est utilisé n'est pas une bonne idée.

Si vous voulez pour ce faire, utilisez un simple répertoire système de fichier et ajouter/supprimer des fichiers. Même cela peut ne pas fonctionner comme prévu.

3
répondu Peter Lawrey 2011-02-19 17:32:23

vous pouvez manipuler n'importe quel fichier jar en utilisant le paquet java.util.jar (ou tout simplement java.util.zip ). Comme les fichiers à l'intérieur d'un pot seront compressés, ce n'est pas le moyen le plus time efficace pour vous de stocker des données.

vous devriez probablement utiliser un répertoire ailleurs (par exemple System.getProperty("user.home") + "/.myProgram" ) ou voir java.util.prefs .

2
répondu OrangeDog 2011-02-19 19:46:23

Class.getResource() renvoie une URL. Théoriquement, vous pouvez utiliser cette URL pour créer vos InputStream et OutputStream . Mais dans la plupart des cas, le JAR généré est un fichier en lecture seule (ou une archive). Ainsi, votre application pourrait trébucher en essayant de l'utiliser.

1
répondu Binaek Sarkar 2012-04-15 10:41:50