[JAVA] Obwohl der Pfad der Eigenschaftendatei in der Option -cp angegeben ist, wird er nicht als Klassenpfad erkannt.

Umgebung

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)

Veranstaltung

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. __ __

Ursachen und Gegenmaßnahmen

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`

Referenz

"Festlegen des Klassenpfads"

Recommended Posts

Obwohl der Pfad der Eigenschaftendatei in der Option -cp angegeben ist, wird er nicht als Klassenpfad erkannt.
Anmerkung: [Java] Wenn sich eine Datei im überwachten Verzeichnis befindet, verarbeiten Sie sie.
Ein aktiver Hash, der als Daten behandelt werden kann, auch wenn er nicht in der Datenbank enthalten ist
Fortsetzung ・ Aktiver Hash, der als Daten behandelt werden kann, auch wenn er nicht in der Datenbank enthalten ist ~ Anzeige
Klassenpfad hinzufügen: zu dem in spring.datasource.schema angegebenen Pfad
[Diskussion] Warum wird System.out (in, err) mit null initialisiert, obwohl es eine Konstante ist?
Der Dateipfad wird nicht erkannt, wenn ein externer Befehl von einer Java-App ausgeführt wird
Java11: Führen Sie Java-Code unverändert in einer einzelnen Datei aus
Selbst wenn ich die Einstellung von STRICT_QUOTE_ESCAPING in CATALINA_OPTS in tomcat8.5 schreibe, wird sie nicht wiedergegeben.
Lesen Sie die Datei unter dem Klassenpfad als Zeichenfolge mit spring
Das Phänomen, dass Sie sich nicht abmelden können, obwohl es in devise beschrieben ist