J'ai écrit une petite application. J'ai mis les informations spécifiques à la base de données dans un fichier de propriétés.
public class DatabaseHandler { public static Connection connectToDb() { Connection con = null; Properties props = new Properties(); InputStream in = null; try { in = DatabaseHandler.class.getResourceAsStream("database.properties"); props.load(in); in.close(); String url = props.getProperty("db.url"); String user = props.getProperty("db.user"); String password = props.getProperty("db.passwd"); con = DriverManager.getConnection(url, user, password); } catch (Exception ex) { Logger.getLogger(DatabaseHandler.class.getName()).log(Level.SEVERE, null, ex); } return con; } }
4 Réponses :
ne pas correspondre à l'emplacement du fichier de propriété. Votre approche devrait être de diffuser le fichier de CLASSPATH. p>
Sinon, la meilleure façon serait de pointer vers une URL qui renvoie les informations de propriétés dans un format de données spécifique (disons JSON). P>
Si vous avez JAR Check Ce out. p>
Si votre application est la guerre check propriétés en guerre . P >
Vous pouvez charger un fichier de propriétés à la place du parcours. Cela vous permet de regrouper le fichier de propriétés à l'intérieur du pot, mais aussi Vous pouvez le faire de la manière suivante: p> Properties props = new Properties();
InputStream inputStream = this.getClass().getClassLoader()
.getResourceAsStream(propFileName);
props.load(inputStream);
Donc, si je viens de mettre le fichier de propriétés dans le même dossier où le fichier jar exécutable est-il opérationnel? (J'ai également édité la question de mettre le code que j'utilise pour récupérer les valeurs du fichier de propriétés)
Vous avez raison. Si les propriétés sont destinées à être modifiables par l'utilisateur, les mettre dans un fichier de propriétés dans le pot ne va pas fonctionner p>
Il y a quelques approches: p>
Vous pouvez mettre les propriétés dans un fichier de propriétés que vous stockez dans le système de fichiers. Le problème consiste à déterminer où em> dans le système de fichiers pour les stocker: p>
sur UNIX / Linux Il existe des conventions sur lesquelles des propriétés de la configuration de stockage et de la configuration à l'échelle du système et de l'utilisateur, mais elles sont un peu lâches et dans un peu d'état de flux (par exemple certains "cadres de bureau" avoir leurs propres mécanismes de préférence. P> li>
Il y a des conventions similaires pour Windows, je crois. P> Li>
Le problème de l'approche peut être des problèmes d'autorisations (vous ne voulez pas que l'un utilisateur changeait les préférences d'un autre), et éventuellement même des problèmes avec des systèmes de fichiers en lecture seule et similaires. P> Li>
Si vous allez utiliser un fichier de propriétés dans le système de fichiers, c'est une mauvaise idée de l'accès à votre code dans votre code. Rendez-le configurable via une argument de ligne de commande et / ou une "propriété système" pouvant être définie à l'aide de l'option sous Windows, vous pouvez mettre les propriétés dans le registre Windows. Mais vous devrez utiliser des bibliothèques tierces pour le faire. Et bien sûr, ce n'est pas portable em> - il ne fonctionnera pas sur une plate-forme non-Windows. P> Li>
Vous pouvez utiliser le API de préférences Java . Ceci est portable sur plusieurs plates-formes, mais c'est une solution Java-Centric; C'est-à-dire que cela ne convient pas à la "voie normale" de la plate-forme de faire des choses. p> li>
ul>
En bref, il n'y a pas de solution idéale de toutes les perspectives. P>
Mais une fois que vous avez décidé comment stocker vos préférences, vous pouvez em> pourriez-vous écrire votre application afin qu'il utilise le fichier de propriétés dans votre fichier JAR pour fournir des paramètres par défaut ou initial. P>
-d code>. P> li>
ul> li>
au lieu de
in = DatabaseHandler.class.getResourceAsStream("/database.properties");
Ce n'est pas clair pour moi ce que vous entendez par «Comment puis-je inclure un fichier de propriétés avec le fichier JAR non in tel» - Ne mettez pas le fichier de propriétés dans le fichier JAR ...
UM ... L'exemple le plus proche que je puisse donner est le fichier
app.config code> dans .NET. Lorsque l'exécutable est créée, le fichier est fourni avec elle, non? Pas à l'intérieur i> it.
Sûr. Alors maintenant, vous avez fourni le code, nous pouvons voir ce que vous devez faire - il suffit d'utiliser un
fichierInputStream code> au lieu de
getresourceastream code>.
Salut Isuru, je cherchais la même information .. Pourriez-vous partager certaines informations sur l'endroit où je devrais placer le fichier code> code>? Et devrais-je utiliser
fichierInputtream code> ou
getresourceastream code>?
@Shruti salut. Malheureusement, j'ai posé cette question il y a 2 ans tout en travaillant sur un projet universitaire. Je ne me souviens d'aucun de cela maintenant. Et je ne suis plus un développeur Java. Ce serait mieux si vous pouviez le demander de quelqu'un qui a affiché une réponse ci-dessous. Ou poster une question séparée entièrement. Désolé.
@Isuru .. pas de problème, laissez-moi vérifier ça