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?
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 ...
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"));
Wenn es sich um eine einfache Anwendung handelt, kann auch getSystemResourceAsStream verwendet werden.
try (InputStream inputStream = ClassLoader.getSystemResourceAsStream("config.properties"))..
Klicken Sie mit der rechten Maustaste auf den Ordner Resources
und wählen Sie Build Path > Add to Build Path
aus.
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);
}
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
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();
}