Как получить файлы из папки ресурсов. Spring Структура
Я пытаюсь размонтировать мой XML файл:
public Object convertFromXMLToObject(String xmlfile) throws IOException {
FileInputStream is = null;
File file = new File(String.valueOf(this.getClass().getResource("xmlToParse/companies.xml")));
try {
is = new FileInputStream(file);
return getUnmarshaller().unmarshal(new StreamSource(is));
} finally {
if (is != null) {
is.close();
}
}
}
Но я получаю следующие ошибки:
java.io.FileNotFoundException: null (Нет такого файла или каталога)
Вот моя структура:
![введите описание изображения здесь]()
Почему я не могу получить файлы из папки ресурсов? Спасибо.
Обновить.
После рефакторинга
URL url = this.getClass(). getResource ( "/xmlToParse/companies.xml" ); Файл file = new File (url.getPath());
Я вижу более ясную ошибку:
java.io.FileNotFoundException:/content/ROOT.war/WEB-INF/classes/xmlToParse/companies.xml(Нет такого файла или каталога)
Он пытается найти WEB-INF/classes/
Я добавил туда папку, но все равно получаю эту ошибку: (
![введите описание изображения здесь]()
Ответы
Ответ 1
У меня была такая же проблема, пытаясь загрузить некоторые файлы XML в мои тестовые классы. Если вы используете Spring, как можно предположить из вашего вопроса, самый простой способ - использовать org.springframework.core.io.Resource - один Raphael Rot h уже упоминался.
Код действительно прямой. Просто объявите поле типа org.springframework.core.io.Resource и отметьте его org.springframework.beans.factory.notation.Value - вот так:
@Value(value = "classpath:xmlToParse/companies.xml")
private Resource companiesXml;
Чтобы получить необходимый InputStream, просто позвоните
companiesXml.getInputStream()
и вы должны быть в порядке:)
Но простите меня, я должен задать одно: почему вы хотите реализовать парсер XML с помощью Spring? Есть много встроенных:). для веб-сервисов есть очень хорошие решения, которые объединяют ваши XML-объекты в объекты Java и обратно...
Ответ 2
ClassLoader classLoader = getClass().getClassLoader();
File file = new File(classLoader.getResource("fileName").getFile());
Ответ 3
вы должны дать абсолютный путь (так что добавьте загрузку '/', где каталог ресурсов - это корневая папка):
public Object convertFromXMLToObject(String xmlfile) throws IOException {
FileInputStream is = null;
File file = new File(String.valueOf(this.getClass().getResource("/xmlToParse/companies.xml")));
try {
is = new FileInputStream(file);
return getUnmarshaller().unmarshal(new StreamSource(is));
} finally {
if (is != null) {
is.close();
}
}
}