J'essaie de créer une classe utilitaire ReadPropertyUtil.Java
pour la lecture de données à partir d'un fichier de propriétés. Bien que ma classe soit située dans un répertoire util, mon fichier skyscrapper.properties
est placé dans un autre répertoire.
Mais, lorsque j'essaie d'accéder aux propriétés en utilisant [ResourceBundle][1]
, j'obtiens des exceptions, cet ensemble ne peut pas être chargé.
Vous trouverez ci-dessous le code indiquant comment je lis les propriétés, ainsi qu’une image qui montre la structure de mon répertoire.
ReadPropertiesUtil.Java
/**
* Properties file name.
*/
private static final String FILENAME = "skyscrapper";
/**
* Resource bundle.
*/
private static ResourceBundle resourceBundle = ResourceBundle.getBundle(FILENAME);
/**
* Method to read the property value.
*
* @param key
* @return
*/
public static String getProperty(final String key) {
String str = null;
if (resourceBundle != null) {
str = resourceBundle.getString(key);
LOGGER.debug("Value found: " + str + " for key: " + key);
} else {
LOGGER.debug("Properties file was not loaded correctly!!");
}
return str;
}
Structure de l'annuaire
Cette ligne donne l'erreur private static ResourceBundle resourceBundle = ResourceBundle.getBundle(FILENAME);
Je suis incapable de comprendre pourquoi cela ne fonctionne pas et quelle est la solution. Le dossier src
est déjà complètement ajouté dans le chemin de génération.
Essayez avec le nom complet pour la ressource:
private static final String FILENAME = "resources/skyscrapper";
ResourceBundle ne charge pas les fichiers? Vous devez d'abord insérer les fichiers dans une ressource. Que diriez-vous juste de charger dans un FileInputStream alors un PropertyResourceBundle
FileInputStream fis = new FileInputStream("skyscrapper.properties");
resourceBundle = new PropertyResourceBundle(fis);
Ou si vous avez besoin du code spécifique aux paramètres régionaux, cela devrait fonctionner.
File file = new File("skyscrapper.properties");
URL[] urls = {file.toURI().toURL()};
ClassLoader loader = new URLClassLoader(urls);
ResourceBundle rb = ResourceBundle.getBundle("skyscrapper", Locale.getDefault(), loader);
Utilisez la ressource comme
ResourceBundle rb = ResourceBundle.getBundle("com//sudeep//internationalization//MyApp",locale);
or
ResourceBundle rb = ResourceBundle.getBundle("com.sudeep.internationalization.MyApp",locale);
Il suffit de donner le chemin qualifié .. Cela fonctionne pour moi !!!
Vous devez définir le nom du fichier de propriétés sans l'extension .properties
, Cela fonctionne correctement pour moi :)
J'aimerais partager mon expérience d'utilisation de Ant dans la construction de projets. Les fichiers * .properties doivent être copiés explicitement . En effet, Ant ne compilera pas les fichiers * .properties dans le répertoire de travail de la construction par défaut (javac ignore simplement * .properties). Par exemple:
<target name="compile" depends="init">
<javac destdir="${dst}" srcdir="${src}" debug="on" encoding="utf-8" includeantruntime="false">
<include name="com/example/**" />
<classpath refid="libs" />
</javac>
<copy todir="${dst}">
<fileset dir="${src}" includes="**/*.properties" />
</copy>
</target>
<target name="jars" depends="compile">
<jar jarfile="${app_jar}" basedir="${dst}" includes="com/example/**/*.*" />
</target>
Veuillez noter que la section 'copie' située sous la cible 'compiler' va répliquer les fichiers * .properties dans le répertoire de travail de la construction. Sans la section 'copy', le fichier jar ne contient pas les fichiers de propriétés, vous pouvez alors rencontrer l'exception Java.util.MissingResourceException.
Avec Eclipse et Windows:
vous devez copier 2 fichiers - xxxPROJECTxxx.properties - log4j.propertieshere: C:\Eclipse\CONTENER\Tomcat\Apache-Tomcat-7\lib
Je viens de me rendre compte que mon erreur a été causée par la convention de dénomination de mon fichier de propriétés. Quand j'ai utilisé xxxx.xxxx.properties, j'ai eu l'erreur:
Java.util.MissingResourceException: impossible de trouver l'ensemble pour le nom de base 'nom_fichier_propriété', paramètres régionaux en_US
Le changer pour quelque chose comme xxx-xxxx.properties fonctionne comme un charme. J'espère aider quelqu'un!
faites un clic droit sur le fichier projet dans Eclipse et dans le chemin de construction, sélectionnez "Utiliser comme dossier source" ... Cela a fonctionné pour moi