2010-06-23 2 views
30

В моем Maven проекте, у меня есть следующий код в основном методе:Каков путь к файлам ресурсов в проекте Maven?

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

но всегда получить файл не найдена ошибки.

Я поместил файл в src/main/resources и правильно скопирован в каталог target/classes (я считаю, что это ожидаемое поведение для ресурсов Maven), но при запуске программы кажется, что он никогда не сможет найти файл. Я пробовал различные другие пути:

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

и т. Д., Но ничего не работает.

Итак, каков правильный путь к использованию?


на основе «открестился в» ответ ниже, здесь было то, что мне было нужно:

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

где TestDB это имя класса.

Спасибо за вашу помощь, отречься!

ответ

51

Вы не можете загрузить файл прямо так, вам нужно использовать абстракцию ресурса (ресурс может быть не только в файловой системе, но и в любом месте пути к классу - в файле jar или иначе). Эта абстракция - это то, что вам нужно использовать при загрузке ресурсов. Пути ресурсов являются относительно расположения вашего файла класса, так что вы должны предварять косую черту, чтобы добраться до «корня»:

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

Если вы пытаетесь получить доступ к файлу из статического метода, GetClass() не работает. Есть ли альтернатива в этом случае? – acarlow

+4

Используйте имя класса, например Main.class.getResourceAsStream(). Вы можете использовать любой класс или загрузчик классов, поэтому hread.getContextClassLoader() также работает. GetResourceAsStream(). –

Смежные вопросы