Dieser Artikel wurde für den Betrieb in der folgenden Umgebung überprüft.
C:\>java -version
openjdk version "11.0.3" 2019-04-16
OpenJDK Runtime Environment AdoptOpenJDK (build 11.0.3+7)
OpenJDK 64-Bit Server VM AdoptOpenJDK (build 11.0.3+7, mixed mode)
Die folgende Main.java
liest die Queen.properties
, die im Klassenpfad vorhanden ist, formatiert und zeigt dann den Inhalt an.
Main.java
import java.io.IOException;
import java.util.Properties;
public class Main {
public static void main(String[] args) {
try (var in = Main.class.getClassLoader().getResourceAsStream("queen.properties")) {
var properties = new Properties();
properties.load(in);
for (var key : properties.stringPropertyNames()) {
var value = properties.getProperty(key);
var message = String.format("key=`%s` value=`%s`", key, value);
System.out.println(message);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
Der Inhalt von king.properties
ist wie folgt.
queen.properties
queen.vocal = Freddie Mercury
queen.guitar = Brian May
queen.bass = John Deacon
queen.drum = Roger Taylor
Nun, ich habe "Main.java" mit "javac" kompiliert, "Main.class" generiert und wie folgt ausgeführt, aber es ist ein Fehler aufgetreten und es hat sich nicht wie erwartet verhalten.
C:\>java -cp properties\queen.properties; Main
Exception in thread "main" java.lang.NullPointerException: inStream parameter is null
at java.base/java.util.Objects.requireNonNull(Objects.java:246)
at java.base/java.util.Properties.load(Properties.java:403)
at Main.main(Main.java:8)
__ In diesem Fall sollten die im Verzeichnis "properties" gespeicherten "Queen.properties" zum Klassenpfad hinzugefügt werden. Aus diesem Grund habe ich in der Option "-cp", die den Klassenpfad angibt, "properties \ Queen.properties" angegeben, aber es scheint, dass dies nicht gut funktioniert hat. __ __
Außer bei der Verwendung von Platzhaltern (*
) scheint die Methode zur Angabe des Klassenpfads ungefähr wie folgt zu sein.
Die Anforderung bestand darin, die Eigenschaftendatei als Klassenpfad anzugeben. Letzteres ist daher die richtige Antwort für die Angabe des Klassenpfads. Als ich in der Option "-cp" den Verzeichnisnamen anstelle des Dateinamens angab, war das Verhalten wie erwartet.
C:\>java -cp properties; Main
key=`queen.guitar` value=`Brian May`
key=`queen.drum` value=`Roger Taylor`
key=`queen.vocal` value=`Freddie Mercury`
key=`queen.bass` value=`John Deacon`
Recommended Posts