Maison  >  Article  >  Java  >  Comment lire le fichier de configuration des propriétés en Java

Comment lire le fichier de configuration des propriétés en Java

高洛峰
高洛峰original
2017-01-12 10:36:091448parcourir

L'exemple de cet article décrit la méthode de lecture du fichier de configuration des propriétés en java. Partagez-le avec tout le monde pour votre référence. L'analyse spécifique est la suivante :

Au cours des deux derniers jours, j'ai travaillé sur des projets Java et utilisé des fichiers de propriétés. J'ai cherché des informations sur Internet pendant longtemps, je n'ai pas trouvé de méthode satisfaisante. cela m'a permis de lire les valeurs des propriétés​​dans le fichier .properties. C'est déprimant. Il existe à peu près les méthodes suivantes pour obtenir les valeurs d'attribut​​sur Internet. optimisé pour obtenir les meilleurs résultats. Ce qui suit utilise le fichier date.properties comme exemple. Le fichier est placé dans le répertoire src. Le contenu du fichier est :

startdate=2011-02-07
totalweek. =25

Méthode 1 :

public class Stweek {
 static private String startdate = null;
 static private String totalweek = null;
 synchronized static public void loads(){
  if(startdate == null || totalweek == null)
  {
   FileInputStream is = null;
   Properties dbProps = new Properties();
   try {
    is = new FileInputStream(filepath); 
    dbProps.load(is);
    startdate = dbProps.getProperty("startdate");
    totalweek = dbProps.getProperty("totalweek");
   }
   catch (Exception e) {
    System.err.println("不能读取属性文件. " +
    "请确保db.properties在CLASSPATH指定的路径中");
   }
  }
 }
 public static String getStartdate() {
  if(tartdate==null)
   loads();
   return startdate;
 }
 public static String getTotalweek() {
  if(startdate==null)
   loads();
   return totalweek;
 }
}

Bien que la méthode ci-dessus puisse également obtenir le contenu du fichier de configuration, sa plus grande limitation est Le problème est le positionnement du chemin du fichier (c'est-à-dire le problème de valeur de chemin de fichier dans le code). Lors de l'utilisation du positionnement absolu, si vous déplacez le projet vers une autre lettre de lecteur à exécuter, vous devez modifier le code source, sinon une erreur sera signalée, mais si vous utilisez le chemin relatif, lorsque le Stweek la classe est déplacée vers un autre package, le code source doit encore être modifié, sinon une erreur sera signalée, donc cette méthode est trop limitée et pas bonne. La méthode 2 suivante peut résoudre ce problème, mais elle a encore quelques problèmes

Méthode 2 :

public class Stweek {
 InputStream is = null;
 Properties dbProps = null;
 public Stweek() {
  // TODO Auto-generated constructor stub
  is = getClass().getResourceAsStream("/date.properties");
  dbProps = new Properties();
  try {
   dbProps.load(is);
  }
  catch (Exception e) {
   System.err.println("不能读取属性文件. " +
   "请确保db.properties在CLASSPATH指定的路径中");
  }
 }
 public String getStartdate()
 {
  String sd = null;
  sd = dbProps.getProperty("startdate");
  return sd;
 }
 public String getTotalweek()
 {
  String totalweek=null;
  totalweek = dbProps.getProperty("totalweek");
  return totalweek;
 }
}
L'avantage de cette méthode est que vous n'avez pas besoin de préciser le chemin absolu du fichier de configuration, et si vous mettez la classe Stweek dans un autre package ou déplacer l'intégralité du projet vers un autre Sous la lettre de lecteur, le code peut toujours s'exécuter normalement, et il n'y aura aucun problème de ne pas trouver le fichier. Cependant, cette méthode présente encore un défaut majeur, car on espère souvent que le fichier de configuration pourra être trouvé. mis en cache dans la mémoire, afin qu'il n'ait pas besoin d'être lu à chaque fois. Tous doivent accéder au disque dur (l'accès à la mémoire externe prend trop de temps. Pour cette raison, nous espérons utiliser des variables statiques et des méthodes statiques pour mettre en cache). et obtenir des variables, et en même temps pouvoir charger dynamiquement ces valeurs. Ensuite, le problème vient, car getClass() .getResourceAsStream("/date.properties"); Cette phrase ne peut apparaître que dans le constructeur (vous pouvez la tester). vous-même). Cette méthode ne peut pas être utilisée en chargement dynamique. Que dois-je faire ? Regardons la troisième méthode

Méthode 3 :

import java.io.InputStream;
import java.util.Properties;
public class Stweek {
 static private String startdate = null;
 static private String totalweek = null;
 static{
  loads();
 }
 synchronized static public void loads(){
  if(startdate == null || totalweek == null)
  {
   InputStream is = Stweek.class.getResourceAsStream("/date.properties");
   Properties dbProps = new Properties();
   try {
    dbProps.load(is);
    startdate = dbProps.getProperty("startdate");
    totalweek = dbProps.getProperty("totalweek");
   }
   catch (Exception e) {
    System.err.println("不能读取属性文件. " +
    "请确保db.properties在CLASSPATH指定的路径中");
   }
  }
 }
 public static String getStartdate() {
 if(startdate==null)
  loads();
  return startdate;
 }
 public static String getTotalweek() {
 if(startdate==null)
 loads();
 return totalweek;
 }
}
Cette méthode peut non seulement mettre en cache le contenu de le fichier de configuration, mais charge également automatiquement le contenu du fichier de configuration dans la mémoire. L'utilisateur n'a pas du tout besoin de prendre en compte le processus de chargement manuel. Appelez simplement Stweek.getStartdate() directement là où vous devez l'utiliser (car c'est le cas). une méthode statique, vous n'avez même pas besoin de créer l'objet à l'avance), donc s'il y a un cache dans la mémoire, la fonction lira directement les données dans la mémoire, économisant du temps, ne vous inquiétez pas s'il n'y en a pas cache, le système le chargera automatiquement pour vous, l'utilisateur n'a pas besoin de savoir comment il est implémenté, sachez simplement que je peux appeler directement la fonction pour obtenir la valeur souhaitée

J'espère que cet article ci-dessus le fera être utile à la programmation Java de chacun.

Pour plus d'articles sur la façon de lire les fichiers de configuration des propriétés en Java, veuillez faire attention au site Web PHP chinois !

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn