2010-06-23 7 views
30

In meinem Maven-Projekt, ich habe den folgenden Code in der Hauptmethode:Wie lautet der Pfad zu Ressourcendateien in einem Maven-Projekt?

FileInputStream in = new FileInputStream("database.properties"); 

aber immer eine Datei erhalten Fehler nicht gefunden.

Ich habe die Datei in src/main/resources und es ist ordnungsgemäß in das Ziel/Klassen-Verzeichnis kopiert (ich glaube, das ist das erwartete Verhalten für Maven-Ressourcen), aber wenn das Programm tatsächlich ausgeführt wird scheint es nie finden die Datei. Ich habe verschiedene andere Wege ausprobiert:

FileInputStream in = new FileInputStream("./database.properties"); 
FileInputStream in = new FileInputStream("resources/database.properties"); 

usw. aber nichts scheint zu funktionieren.

Also, was ist der richtige Pfad zu verwenden?


Basierend auf "Ablehnungs des" weiter unten beantworten, hier war, was ich brauchte:

InputStream in = TestDB.class.getResourceAsStream("/database.properties") 

wo TestDB der Name der Klasse ist.

Danke für Ihre Hilfe, verleugnen!

Antwort

51

Sie können die Datei nicht direkt so laden, Sie müssen die Ressourcenabstraktion verwenden (eine Ressource könnte nicht nur im Dateisystem sein, sondern an einer beliebigen Stelle im Klassenpfad - in einer JAR-Datei oder auf andere Weise). Diese Abstraktion muss beim Laden von Ressourcen verwendet werden. Ressourcen Pfade sind relativ zu dem Speicherort Ihrer Klassendatei, so benötigen Sie einen Schrägstrich voranstellen, um den ‚root‘ zu erhalten:

InputStream in = getClass().getResourceAsStream("/database.properties"); 
+0

Wenn Sie versuchen, die Datei aus einer statischen Methode zuzugreifen, getClass() funktioniert nicht. Gibt es in diesem Fall eine Alternative? – acarlow

+4

Verwenden Sie den Klassennamen, z. B. Main.class.getResourceAsStream(). Sie können jede Klasse oder Klassenladeprogramm verwenden, also funktioniert auch die Funktion "read.getContextClassLoader(). GetResourceAsStream()". –

Verwandte Themen