2013-04-03 4 views
0

Вот моя Maven структура:Исполняемые банку не может найти ресурсы

project 
    ---src 
    ----main 
     ----java 
      ----App.java 
     ----resources 
      ----config.properties 

Вот код для чтения config.properties:

private static final URL propFile = ClassLoader.getSystemResource("config.properties"); 

public App() throws IOException { 
    props.load(new FileInputStream(propFile.getFile())); 
} 

public static void main(String[] args) { 
    try { 
     App app = new App(); 
     //Something interesting happens here 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 

Когда я бегу java -jar MyApp-1.0.jar, я получаю FileNotFoundException:

java.io.FileNotFoundException: файл: /home/dragon/JavaProjects/MyApp/target/MyApp-1.0.jar! /config.pr (Нет такого файла или каталога)

Что в этом плохого?

ответ

1

Любой из них должен работать нормально:

Properties props = new Properties(); 
props.load(Thread.currentThread().getContextClassLoader() 
     .getResourceAsStream("config.properties")); 
// OR 
props.load(ClassLoader.getSystemResourceAsStream("config.properties"); 

В вашем примере , вы пытаетесь получить доступ к файлам, встроенным в архив JAR, через FileInputStream, которые вы не можете сделать напрямую.

+0

Да, это отлично работает. Но я не могу понять, почему Java не ищет папку классов в моем базовом варианте. – Dragon

+0

@ Dragon - см. Править. Ваше приложение JAR'ed, поэтому вы не сможете использовать выходной поток файла для извлечения встроенных ресурсов. Вы могли бы просто спросить, а не завышать. – Perception

+0

Теперь мне стало ясно. Благодарю. – Dragon

1

В вашей папке java вы должны поместить каталог App.java и ресурсов. Тогда вы могли бы получить свойства файла, используя этот код:

private static final URL propFile = getClass().getResourceAsStream("resources/config.properties"); 

public App() throws IOException { 
    props.load(new FileInputStream(propFile.getFile())); 
} 

Так что ваша структура проекта будет выглядеть так:

project 
    ---src 
    ----main 
     ----java 
      ----App.java 
      ----resources 
       ----config.properties 
+0

getClass не может ссылаться на статический контекст. И тогда получается «NullPointerException». – Dragon

+0

Не могли бы вы выслать полный код, пожалуйста? (также, чтобы избежать NullPointerException, вы должны проверить перед загрузкой реквизитов, если это не null - если (propFile! = null), то загрузите его). –

+0

В соответствии со стандартным расположением каталога maven у меня есть правильная структура проекта. (Измененная тема дает больше кода). – Dragon

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