Heim  >  Artikel  >  Java  >  So lesen Sie die Eigenschaftenkonfigurationsdatei in Java

So lesen Sie die Eigenschaftenkonfigurationsdatei in Java

高洛峰
高洛峰Original
2017-01-12 10:36:091416Durchsuche

Das Beispiel in diesem Artikel beschreibt die Methode zum Lesen der Eigenschaftenkonfigurationsdatei in Java. Teilen Sie es als Referenz mit allen. Die konkrete Analyse lautet wie folgt:

Ich habe in den letzten zwei Tagen an Java-Projekten gearbeitet und Eigenschaftendateien verwendet. Ich konnte lange Zeit keine zufriedenstellende Methode finden Das hat es mir ermöglicht, die Eigenschaftswerte in der .properties-Datei zu lesen. Es gibt ungefähr die folgenden drei Methoden, um sie zu erhalten Optimiert, um die besten Ergebnisse zu erzielen. Die Datei wird im src-Verzeichnis abgelegt:

startdate=2011-02-07
totalweek =25

Methode 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;
 }
}

Obwohl die obige Methode auch den Inhalt der Konfigurationsdatei abrufen kann, besteht ihre größte Einschränkung darin, dass das Problem in der Positionierung des Dateipfads liegt (d. h. der Wenn Sie bei Verwendung der absoluten Positionierung das Projekt zur Ausführung auf einen anderen Laufwerksbuchstaben verschieben, müssen Sie den Quellcode ändern. Andernfalls wird ein Fehler gemeldet. Wenn Sie jedoch den relativen Pfad verwenden, wird bei Stweek Wenn die Klasse in ein anderes Paket verschoben wird, muss der Quellcode noch geändert werden, andernfalls wird ein Fehler gemeldet, daher ist diese Methode zu eingeschränkt und nicht gut. Die folgende Methode 2 kann dieses Problem lösen, weist jedoch immer noch einige Probleme auf.

Methode 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;
 }
}

Der Vorteil dieser Methode besteht darin, dass Sie nicht den absoluten Pfad der Konfigurationsdatei angeben müssen und nicht angeben müssen, ob Sie die Stweek-Klasse in ein anderes Paket einfügen oder Verschieben Sie das gesamte Projekt auf ein anderes Unter dem Laufwerksbuchstaben kann der Code weiterhin normal ausgeführt werden und es besteht kein Problem, die Datei nicht zu finden. Diese Methode weist jedoch immer noch einen großen Fehler auf, da wir häufig hoffen, dass die Konfigurationsdatei dies kann im Speicher zwischengespeichert, sodass nicht jedes Mal auf die Festplatte zugegriffen werden muss (der Zugriff auf den externen Speicher ist zu zeitaufwändig). Aus diesem Grund hoffen wir, statische Variablen und statische Methoden zum Zwischenspeichern zu verwenden und Variablen abrufen und gleichzeitig diese Werte dynamisch laden können. Dann kommt das Problem, denn getClass() .getResourceAsStream("/date.properties"); kann nur im Konstruktor erscheinen (Sie können ihn testen). Diese Methode kann nicht beim dynamischen Laden verwendet werden. Schauen wir uns die dritte Methode an:

Diese Methode kann nicht nur den Inhalt zwischenspeichern Die Konfigurationsdatei wird geladen, aber der Benutzer muss den manuellen Ladevorgang überhaupt nicht berücksichtigen. Rufen Sie einfach Stweek.getStartdate() direkt dort auf, wo Sie es verwenden müssen Bei einer statischen Methode müssen Sie das Objekt nicht einmal im Voraus erstellen. Wenn sich also ein Cache im Speicher befindet, liest die Funktion die Daten direkt im Speicher und spart so Zeit. Machen Sie sich keine Sorgen, wenn Es gibt keinen Cache, das System lädt es automatisch für Sie, der Benutzer muss nicht wissen, wie es implementiert ist, sondern nur wissen, dass ich die Funktion direkt aufrufen kann, um den gewünschten Wert zu erhalten
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;
 }
}

Ich hoffe, dieser Artikel Das Obige wird für die Java-Programmierung aller hilfreich sein.

Weitere Artikel zum Lesen von Eigenschaftenkonfigurationsdateien in Java finden Sie auf der chinesischen PHP-Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn