2016-07-12 2 views
0

У меня есть проект maven, который я устанавливаю и запускаю с помощью Windows Prompt (console). И каждый раз, когда я запускаю его я получаю FileNotFoundException:FileNotFoundException с помощью Notepad

public Properties getConfigProperties() throws Exception { 
     ClassLoader loader = getClass().getClassLoader(); 
     File file = new File(loader.getResource("config.properties").getFile()); 
     config.load(new FileReader(file)); 
     return config; 
} 

Или NullPointerException, если я использую classpath:config.properties.

config.properties файл находится внутри /src/main/resources/ папка.

Также, если я запускаю проект в среде IDE, он успешно завершается без каких-либо исключений.

В чем проблема при использовании команды консоли?

ответ

2

Insteed из

File file = new File(loader.getResource("config.properties").getFile()); 

использования

File file = new File(loader.getResourceAsStream("config.properties")); 

Другой способ, чтобы получить файл XML загружен в вашем пути к классам является использование Spring Framework, как показано ниже:

PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver(); 
resolver.getResources("classpath*:your/package/**/config.properties"); 
+0

Ok, ' getResourceAsStream() 'работает. Но вы можете объяснить, почему? – nllsdfx

+1

Это, безусловно, проблема классаLoader. Eclipse IDE имеет собственный классLoader, который при вызове 'getResource' или' getResourceAsStream' получает файл из 'workspace/test/target/classes/config.properties'. Но когда вы запускаете его из командной строки, загрузчик классов пытается получить его из ' /YOUR_JAR.jar! Config.properties', и этот путь недействителен для создания ** java.io.File ** и выдает« FileNotFoundException » ' –

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