Comment savoir si une propriété existe ou non dans un fichier de propriété en Java? P>
8 Réponses :
Selon http: //java.sun. COM / Javase / 6 / Docs / API / Java / UTIL / Propriétés.html , GetProperty () Code> Retours NULL code> Si la propriété n'a pas été trouvée. Vous pouvez également appeler PropertyNames () code> ou stringpropertynames () CODE> et consultez si le nom de propriété d'intérêt est dans le jeu retourné. P>
Il suffit de charger le fichier de propriétés, puis d'essayer d'obtenir la propriété souhaitée.
public String getProperty(String key)
Vous pouvez également appeler getProperty (clé de chaîne, chaîne de valeur par défaut) code> et vérifier si la valeur de retour est le defaultValue code>. P>.
Et si la propriété était définie sur la valeur par défaut? Ce n'est pas une approche sûre.
Vous pouvez définir defaultvalue code> sur une valeur qui n'est pas valide dans le domaine particulier, e, g .: ### espaceholder ### code>
Voici quelques astuces Comment savoir que certains fichiers (non obligatoires de propriété) existe dans le chemin de classe
public class FileUtil {
public static boolean isFileExists(String fileName){
return null != FileUtil.class.getResourceAsStream(fileName);
}
}
Une autre alternative consiste à exploiter le fait que les propriétés étend Hashtable contenant la clé code>. p>
Cela ne fonctionne pas pour moi en Java8 via Groovy. Je ne suis pas sûr que cela fonctionnerait dans Pure Java non plus
Si vous souhaitez vérifier qu'au début du programme, vous pouvez procéder comme suit:
VerifiedProperties code> qui étend Propriétés CODE> LI>
- Ajoutez toutes les propriétés en tant que champs de cette classe comme
finale publique int / string / boolean / etc ... code> li>
- Ajouter
String Final String NetworkNotvalid = "Propriété non valide" Code> String à cette classe LI>
- Ajouter
Final String NetworkNotFound = "Propriété introuvable" Code> String à cette classe LI>
- remplacement
getProperty () code> méthode à partir de la classe de propriétés. Li>
- Vous pouvez ajouter
@depecated code> Tag pour suggérer une utilisation des champs. Il est impossible de cacher cette méthode car il est public dans la classe de propriétés. Li>
- Initialisez tous les champs du constructeur à l'aide de
getProperty () code> méthode ou dédié pour type (examens d'aspect ci-dessous) li>
ol> Exemple de méthodes qui s'occupe de différents types de propriétés: P>
@Override
@Deprecated
/*
Deprecated annotation added to suggest usage of the fields.
*/
public final String getProperty(String key)
{
String propertyValue = super.getProperty(key);
if (propertyValue != null)
{
return propertyValue;
}
else
{
throw new NoSuchFieldError(this.propertyNotFound + " " + key);
}
}
private int getIntegerProperty(String key)
{
String propertyValue = this.getProperty(key);
try
{
int propertyIntValue = Integer.parseInt(propertyValue);
return propertyIntValue;
}
catch (NumberFormatException e)
{
throw new NumberFormatException(this.propertyNotValid + " " + key);
}
}
private boolean getBooleanProperty(String key)
{
String propertyValue = this.getProperty(key);
try
{
boolean propertyBooleanValue = Boolean.parseBoolean(propertyValue);
return propertyBooleanValue;
}
catch (NumberFormatException e)
{
throw new NumberFormatException(this.propertyNotValid + " " + key);
}
}
private long getLongProperty(String key)
{
String propertyValue = this.getProperty(key);
try
{
long propertyLongValue = Long.parseLong(propertyValue);
return propertyLongValue;
}
catch (NumberFormatException e)
{
throw new NumberFormatException(this.propertyNotValid + " " + key);
}
}
La réponse de Crazyscot est maintenant obsolète. Selon le nouveau Javadoc , la propriété sera simplement créée si cela n'existe pas, P>
"S'il n'y a pas d'ensemble actuel de propriétés du système, un ensemble de propriétés du système est d'abord créé et initialisé de la même manière que la méthode getProperties". P> blockQuote>
Vous pouvez utiliser HASPROPERTY
AllValues.hasProperty("childList")
Je ne vois pas cette méthode dans mon débogueur ou mon javadoc pour 7 ou 8. docs.oracle.com/javase/8/docs/api/java/util/properties.html