Die folgenden Inhalte 1-4 sind verwandte Kenntnisse, die online gesammelt wurden. Zusammenfassend sind sie die folgenden Wissenspunkte:
1. Die am häufigsten verwendete Methode zum Lesen von Eigenschaftendateien InputStream in = getClass (). GetResourceAsStream ("Resourcename"); Diese Methode erfordert, dass die Eigenschaftendatei und die aktuelle Klasse im selben Ordner sind. Wenn Sie in einem anderen Paket verwenden, müssen Sie verwenden:
InputStream INS = this.getClass (). GetResourceAsStream ("/cn/zhao/properties/testpropertiesPath2.Properties");2. Holen Sie sich die Pfadmethode in Java
3.. Eine einfache Implementierung des Erhaltens von Wegen
4. Drei Möglichkeiten, um Eigenschaftendateien in Reflexion zu erhalten
1 Die häufigsten Methoden und Gedanken zum Erhalten von Eigenschaftendateien in Reflexion:
Es gibt viele Möglichkeiten, Eigenschaftendateien in Java zu lesen. Die häufigsten Artikel im Internet sind "sechs Möglichkeiten, um Eigenschaftendateien in Java zu lesen". In Java -Anwendungen besteht die am häufigsten verwendete Methode darin, sie über die GetResourceAsStream -Methode (String -Name) der Java.lang.Class -Klasse zu implementieren. Ich habe jedoch gesehen, dass viele Codes mit dem Lesen von Eigenschaftendateien dies tun:
InputStream in = getClass (). GetResourceAsStream ("ressourcename"); Hier gibt es ein Problem, das heißt, dies wird standardmäßig ausgelassen, wenn Sie GetClass () anrufen! Wir alle wissen, dass dies nicht in statischen (statischen) Methoden oder statischen Blöcken verwendet werden kann. Der Grund dafür ist, dass statische Methoden oder Codeblöcke zur Klasse selbst gehören und nicht zu einem bestimmten Objekt gehören. Dies selbst repräsentiert das aktuelle Objekt, und das Objekt wird nicht initialisiert, wenn statische Methoden oder Blöcke aufgerufen werden.
Das Problem ist: Wenn ich nicht möchte, dass eine bestimmte Klasse ein Objekt hat, werde ich den Standardkonstruktor dieser Klasse auf privat einstellen, und natürlich werde ich keine anderen gängigen Konstruktoren schreiben. Und meine Klasse ist eine Werkzeugkurs, die alle statische Methoden und Variablen sind. Ich möchte Eigenschaftendateien in statischen Blöcken oder statischen Methoden abrufen, und diese Methode funktioniert nicht.
Also, was soll ich tun? Tatsächlich wird diese Klasse nicht so verwendet. Es muss nur ein Klassenobjekt bekommen, was nicht einfach ist -
Wenn Sie das Objekt der Elternklasse aller Klassen nehmen, ist es nicht bequem und sicherer, Object.Class zu verwenden, als Ihre zum Schreiben der Klasse selbst zu verwenden? Haha, hier ist ein Beispiel, um die Kommunikation zu erleichtern.
Import Java.util.Properties; importieren java.io.inputstream; importieren java.io.ioException; / ** * Beispiel für das Lesen von Eigenschaften Dateien * Datei: TestProperties.java * Benutzer: Leishimin * Datum: 2008-2-15 18:38:40 */ Public Final Class TestProperties {private statische String-Param1; private statische Zeichenfolge Param2; static {Properties prop = neue Eigenschaften (); InputStream in = Objekt. class .getResourceAsStream ("/test.properties"); versuche {prop.load (in); param1 = prop.getProperty ("inityears1") .trim (); param2 = prop.getProperty ("Inityears2") .trim (); } catch (ioException e) {e.printstacktrace (); }} / *** privater Konstruktor, kein Objekt ist erforderlich* / private testProperties () {} public static String getParam1 () {return param1; } public static String getParam2 () {return param2; } public static void main (String args []) {System.out.println (getParam1 ()); System.out.println (getParam2 ()); }}Auslaufergebnisse:
151
152
Natürlich ist es immer noch in Ordnung, Object.class durch int.class zu ersetzen. Haha, du kannst es versuchen.
Wenn Sie die Eigenschaftendatei in einer statischen Methode oder einem Block lesen, gibt es außerdem eine andere sicherste Methode, bei der das Klassenobjekt direkt mit dem Namen der Klasse abgerufen wird. In diesem Beispiel kann es beispielsweise als Testproperties.Class geschrieben werden. Dies ist die sicherste Methode.
2 Wie man den Weg bekommt:
Dateidateib = neue Datei (this .getClass (). GetResource ("") .getPath ()); System. out .println ("Dateib -Pfad:" + fileB);2.2 Erhalten Sie den Projektnamen der aktuellen Klasse:
System. out .println ("user.dir Pfad:" + System. getProperty ("user.dir"))3. Eine einfache Java -Implementierung, um den Pfad zu erhalten
/ *** Holen Sie sich den absoluten Pfad der Datei unter dem relativen Pfad des Projekts** @param parentdir* Das übergeordnete Verzeichnis der Zieldatei, beispielsweise im Projektverzeichnis, es gibt Lib-, Bin- und Conf -Verzeichnisse, so getPath (String ParentDir, String Dateiname) {String path = null; String userDir = system.getProperty ("user.dir"); String userDirname = new Datei (userDir) .getName (); if (userDirname.equalSignoreCase ("lib") || userDirname.equalSignoreCase ("bin")) {Datei newf = new Datei (userDir); Datei newp = new Datei (newf.getParent ()); if (fileName.trim (). Equals ("") {path = newp.getPath () + Datei.Separator + ParentDir; } else {path = newp.getPath () + file.separator + parentdir + file.separator + Dateiname; }} else {if (fileName.trim (). Equals ("") {path = userDir + file.separator + parentdir; } else {path = userDir + file.separator + parentdir + file.separator + fileName; }} return path; } 4 Verwenden Sie die Reflexion, um den Pfad zu erhalten:
InputStream IPS1 = Aufzählung. class .getClassloader () .getResourceAsStream ("cn/zhao/enumstudy/testpropertieSpath1.Properties"); InputStream IPS2 = Aufzählung. Klasse .GetResourceAsStream ("TestPropertieSpath1.Properties"); InputStream IPS3 = Aufzählung. Klasse .GetResourceAsStream ("Eigenschaften/TestpropertiesPath2.Properties");Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.