Проблема загрузки ресурсов из classpath - PullRequest
1 голос
/ 08 октября 2010


В веб-приложении, работающем на локальном коте, я пытаюсь загрузить папку /folder, которая находится в tomcat/webapps/myproject/WEB-INF/folder Для этого:

InputStream realPath = getClass().getClassLoader().getResourceAsStream("/folder");  

, которая возвращает null,Предполагается, что этот фрагмент кода загружает ресурсы из classpath, то есть если я не ошибаюсь в пути, где находится моя папка.
В любом случае я переместил свою папку по разным путям, таким как tomcat/webapps/myproject/WEB-INF/classes/folder или tomcat/webapps/myproject/WEB-INF/lib/folderс тем же результатом.
Я что-то пропустил?Заранее спасибо.

Относительно всех ваших ответов (спасибо) я редактирую свой вопрос со всеми, что я пробовал, с тем же нулевым результатом.
A)

 String realSource = getServletContext().getRealPath("/folder");  

B)

InputStream realPath = getClass().getClassLoader().getResourceAsStream("/folder/fileInFolder"); 

C)

ServletContext servletContext = (ServletContext)context.getExternalContext().getContext();
String realSource = servletContext.getRealPath("/folder");

Я должен сказать, что мой folder путь - tomcat/webapps/myproject/WEB-INF/classes/folder

Ответы [ 3 ]

3 голосов
/ 08 октября 2010

Проблема в том, что / WEB-INF отсутствует в CLASSPATH файла WAR.

/ WEB-INF / classes находится в CLASSPATH;как и все файлы JAR в /WEB-INF/lib.

Если вы поместите нужный файл в классы / WEB-INF /, загрузчик классов WAR сможет найти его.

Вы не можете прочитать каталог таким образом.Это должен быть файл.

ОБНОВЛЕНИЕ:

В любом случае, я переместил свою папку по разным путям, таким как tomcat / webapps / myproject / WEB-INF / classes / folder или tomcatПапка / webapps / myproject / WEB-INF / lib / с тем же результатом.Я что-то пропустил?

Да, вы пропустили две вещи:

  1. Ваша папка должна находиться в одном месте - в / WEB-INF / classes
  2. Вы не можетеполучить доступ к папке с помощью getResourceAsStream () и прочитать все содержимое.Это не работает таким образом.Таким способом вы можете прочитать только один отдельный файл.
1 голос
/ 08 октября 2010

Если вам нужен полный путь к папке в вашем веб-приложении, чтобы вы могли использовать над ним операции с файлами, вот способ сделать это.

Примечание: моя папка параллельна WEB-INF в моем веб-приложении

String relativeWebPath = "/myfolder";
String absoluteDiskPath = getServletContext().getRealPath(relativeWebPath);

Теперь распечатка absoluteDiskPath дает мне

D:\apache-tomcat-6.0.20\webapps\mywebapp\myfolder

Попробуйте перечислить файлы в этой папке по

File dir = new File(absoluteDiskPath); 

String[] children = dir.list(); 
if (children != null) 
{ 

    for (int i=0; i<children.length; i++) { 
    // Get filename of file or directory 

    String filename = children[i]; 
    System.out.println("filename no " + i + filename);
    } 
}
0 голосов
/ 08 октября 2010

Удалите начальную косую черту и попробуйте то есть

InputStream realPath = getClass().getClassLoader().getResourceAsStream("folder");  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...