wake-up-neo.net

Eigenschaftendatei kann nicht aus dem Ressourcenverzeichnis geladen werden

Ich habe ein Projekt aus einem Git-Repository importiert und Maven nature in Eclipse hinzugefügt. Im Ressourcenordner habe ich eine Konfigurationsdatei mit dem Namen myconf.properties hinzugefügt. Immer wenn ich versuche, diese Datei aus meinem Java-Code heraus zu öffnen, erhalte ich FileNotFoundException. Die Datei ist auch in dem Ordner target/classes vorhanden, der erstellt wurde, nachdem Maven das Projekt kompiliert hat.

Kann mir jemand sagen, woran das liegen kann? Mein Java-Code, mit dem versucht wird, diese Datei zu laden, lautet:

props.load(new FileInputStream("myconf.properties"));

dabei ist props ein Properties-Objekt.

Kann mir jemand ein paar Tipps geben, wie ich dieses Problem lösen kann?

46
artaxerxe

Wenn die Datei nach dem Kompilieren unter target/classes gespeichert wird, befindet sie sich bereits in einem Verzeichnis, das Teil des Erstellungspfads ist. Das Verzeichnis src/main/resources ist das Maven-Standardverzeichnis für solche Ressourcen und wird vom Eclipse Maven-Plugin (M2E) automatisch in den Erstellungspfad gestellt. Es ist also nicht notwendig, Ihre Eigenschaftendatei zu verschieben.

Das andere Thema ist, wie solche Ressourcen abgerufen werden. Ressourcen im Erstellungspfad befinden sich automatisch im Klassenpfad des laufenden Java-Programms. In Anbetracht dessen sollten Sie solche Ressourcen immer mit einem Klassenlader laden. Beispielcode:

String resourceName = "myconf.properties"; // could also be a constant
ClassLoader loader = Thread.currentThread().getContextClassLoader();
Properties props = new Properties();
try(InputStream resourceStream = loader.getResourceAsStream(resourceName)) {
    props.load(resourceStream);
}
// use props here ...
108
Seelenvirtuose

Ich denke, Sie müssen es unter src/main/resources setzen und es wie folgt laden: 

props.load(new FileInputStream("src/main/resources/myconf.properties"));

Die Art und Weise, wie Sie versuchen, es zu laden, wird zunächst im Basisordner Ihres Projekts eingecheckt. Wenn es sich in target/classes befindet und Sie es von dort laden möchten, gehen Sie wie folgt vor:

props.load(new FileInputStream("target/classes/myconf.properties"));
16
VD'

Wenn es sich um eine einfache Anwendung handelt, kann auch getSystemResourceAsStream verwendet werden.

try (InputStream inputStream = ClassLoader.getSystemResourceAsStream("config.properties"))..
5
rns

Klicken Sie mit der rechten Maustaste auf den Ordner Resources und wählen Sie Build Path > Add to Build Path aus.

3
Kevin Bowersox

Ich benutze so etwas, um die Eigenschaftendatei zu laden.

        final ResourceBundle bundle = ResourceBundle
                .getBundle("properties/errormessages");

        for (final Enumeration<String> keys = bundle.getKeys(); keys
                .hasMoreElements();) {
            final String key = keys.nextElement();
            final String value = bundle.getString(key);
            prop.put(key, value);
        }
1
Karthik Prasad

Ich glaube, wenn Sie von Eclipse aus laufen, wenn Sie "myconf.properties" als relativen Pfad verwenden, sollte Ihre Dateistruktur so aussehen

ProjectRoot
         src
         bin
         myconf.properties

Eclipse sucht nach der Datei im Projektstammverzeichnis, wenn keine anderen Verzeichnisse im Dateipfad angegeben sind

0
Paul Samsotha

ClassLoader.getSystemClassLoader() verwenden

Beispielcode :

Properties prop = new Properties();
InputStream input = null;
try {
    input = ClassLoader.getSystemClassLoader().getResourceAsStream("conf.properties");
    prop.load(input);

} catch (IOException io) {
    io.printStackTrace();
}
0
Deep Nirmal