2010-06-24 6 views
2

У меня есть встроенный Java-код, в котором я пытаюсь загрузить файл свойств, который находится в той же папке, что и файл JSP:JSP: FileReader с относительным путем броска FileNotFoundException

Properties titles = new Properties(); 
titles.load(new FileReader("titles.txt")); 

код, приведенный выше бросает исключение FileNotFoundException.

Как именно это относится к текущей папке?

+1

Связанный: http://stackoverflow.com/questions/2792870/java-cant-find-file-when-running-through-eclipse/2792939#2792939 – BalusC

ответ

1

Используя загрузчик классов, который загружает ваш класс, вы можете легко получить файл.

getClass().getClassLoader().getResourceAsStream("titles.txt"); 

Однако я не знаю, будет ли он работать с JSP

Вы можете также использовать ServletContext.getResourceAsStream(""), но тогда вы должны дать полный WebContent-относительный путь.

+0

Последнее не соответствует действительности. Он просто принимает относительный путь webcontent. – BalusC

+0

спасибо, это то, что я знаю, но это не совсем понятно – Redlab

4

Две вещи:

  1. JSPs не должен содержать код Java. используйте mvc framework (spring mvc, stripes и т. д.) в качестве контроллера и используйте JSP только как просмотр. Это значительно облегчает жизнь
  2. Вы не должны получать доступ к файлам ресурсов через файловую систему в веб-приложении, используйте доступ к загрузчику классов as suggested by redlab. Проблема в том, что веб-приложение может или не может быть распаковано в файловой системе, это до контейнера сервлетов

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

Итак: создать класс контроллера, поместить файл свойств в той же папке, и загрузить его из класса контроллера через getClass().getClassLoader().getResourceAsStream("titles.txt");

+0

да, я тоже думал об этом, это может быть проблема с компиляцией JSP, и ресурс не будет найден. И, конечно же, совершенно правильно в пункте 1 !!! – Redlab

3

FileReader требует абсолютного пути, или относительно того, где выполняется java. Но для веб-приложений это обычно делается через /etc/init.d/tomcat startup, и вы не можете полагаться на то, что является текущим.

Вы можете получить абсолютный путь вашего приложения, вызвав servletContext.getRealPath("/relative/path/to/file.txt")

Вы можете получить относительную часть URL по телефону request.getRequestURL().

Сказали, что лучше использовать этот код в сервлете, а не JSP-JSP - это технология просмотра, и логика не должна быть помещена в нее.

+0

FileReader требует абсолютного пути '. Нет, нет. Проблема здесь в том, что текущий каталог при выполнении JSP не определяется каким-либо атрибутом самого JSP, поэтому размещение файла относительно JSP бессмысленно. – EJP

+0

@EJP см. Обновленный – Bozho

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