#java #tomcat #servlets #file-io
#java #tomcat #сервлеты #file-io
Вопрос:
Я создал небольшое приложение, которое просматривает мою файловую систему, чтобы создать и отобразить ее в виде дерева (JTree). Теперь я хочу сделать то же самое для моих файлов, присутствующих на моем сервере. У меня есть сервер Apache Tomcat. То, что я хочу сделать, это что-то вроде :
File dir = new File(new URI("file://localhost:8084/myapp/Dir"));
File[] files = dir.listFiles();
for (File f : files) {
System.out.println(f.getAbsolutePath());
это всего лишь пример, но я хочу использовать java File API.
Я получаю эту ошибку, когда помещаю этот код в сервлет :
11 mai 2011 10:02:15 org.apache.catalina.core.StandardWrapperValve invoke "Servlet.service()" pour la servlet tests a généré une exception
java.lang.IllegalArgumentException: URI has an authority component
at java.io.File.<init>(File.java:385)
Я не знаю, что это значит.
Я также пробовал File dir = new File("Dir") ;
и File dir = new File("web/Dir")
и даже File dir = new File(new URI(http://localhost:8084/myapp/Dir
));
но каталог не найден. Я не понимаю этого и схожу с ума (хм .. извините).
когда я набираю http://localhost:8084/myapp/Dir
в своем веб-браузере, отображается содержимое каталога.Итак, каталог действительно включен http://localhost:8084/myapp /
Мне действительно действительно нужна некоторая резервная копия здесь. Заранее спасибо.
Ответ №1:
Предполагая, что ваше веб-приложение развернуто как распакованный war, тогда вы можете использовать getRealPath()
on ServletContext
объект для получения реального пути файловой системы для заданного пути веб-приложения.
Итак, изнутри вашего сервлета:
File dir = new File(getServletContext().getRealPath("/Dir"));
Смотрите javadoc.
Обратите внимание, что это не очень хорошая практика и не будет работать на любом сервере приложений, который не распаковывает свои WARs в файловую систему перед ее запуском (например, Google App Engine).
Комментарии:
1. Спасибо за ваш быстрый ответ. Это работает. Выглядит нормально, я буду работать над этим.
2. Есть ли какое-либо лучшее решение? например, для движка приложений Gooogle.
3. @lemoos: Не для GAE, нет, это очень ограниченная среда.