2015-07-28 2 views
0
Package 
| 
|------src/main/java 
|------resources 
      |---- config.properties 

В pom.xml, я поставил каталог resoucres следующегоMaven: Не в состоянии прочитать файл из папки ресурсов

<resources> 
     <resource> 
      <directory>resources</directory> 
     </resource> 
</resources> 

Я могу получить абсолютный путь к файлу , Но когда я пытаюсь прочитать или проверить, является ли это файлом или каталогом, он возвращает false.

sample.java

File configFile = new File("config.properties");    
     System.out.println("PATH="+newFile.getAbsolutePath()); 
     System.out.println("IsFile="+newFile.isFile()); 
     System.out.println("CanRead="+configFile.canRead()); 

Выход

PATH=D:\JCB\MyWorkSpace_LunaJEE\MessageProcessor\config.properties 
IsFile=false 
CanRead=false 

Любая помощь будет оценена.

ответ

1

Файл находится не в D:\JCB\MyWorkSpace_LunaJEE\MessageProcessor\config.properties, но в папке resources есть, поэтому он не существует и, следовательно, не является ни файлом, ни каталогом. Я хотел бы предложить положить его в /src/main/resources, а затем к нему доступ через getResourceAsStream(name);

0

В pom.xml, я поставил каталог resoucres следующим

Это определяет каталог, в котором ресурсы будут сохранены как часть Структура сборки Maven - поэтому он указывает, где Maven должен искать файлы ресурсов для включения в вашу программу. Он не определяет, где файлы можно найти при запуске приложения. Это не очень хорошая идея, чтобы перейти от конвенций Maven, сохраните ее как src/main/resources, если сможете. Если вы используете внешнюю оснастку поверх Maven, в противном случае вы можете столкнуться с конфликтами.

Какова важная часть того, что происходит с файлами, когда приложение создано Maven, когда вы делаете, например, mvn clean install.

все, что в SRC/главная/Java компилируется и классы помещаются в каталог целевой, в их правильной структуры пакета. Файлы и каталоги в папке src/main/resources копируются в тот же целевой каталог. Ресурсы, таким образом, являются частью вашей Java-программы и доступны на classpath; если вы позволите Maven построить ваше приложение в исполняемом банке в этот момент, например, ресурсы будут упакованы вместе с классами внутри этого баннера.

Для правильной загрузки файлов ресурсов, упакованных в ваше приложение, вы должны использовать систему загрузки классов Java. This question's answer демонстрирует это подробно. Чтобы изменить текущий код проверки, вы бы скорее сделали примерно следующее:

InputStream is = getClass().getClassLoader().getResourceAsStream("config.properties"); 

if(is != null){ 
    // yep, the file exists on the classpath! Now load it with the InputStream 
} 
Смежные вопросы