Попытка обновить файл в папке src / web / prod (jsp) - PullRequest
1 голос
/ 12 января 2010

Я использую jboss, eclipse и svn вместе. Мне нужно файлы в моей тестовой папке: test / create.jsp и test / data.txt . Что я хочу сделать, так это когда я вызываю мой create.jsp , он обновляет мой data.txt . Очевидно, я хочу, чтобы мой data.txt оставался там, где он есть, поскольку другие скрипты пытаются читать из него.

Я пробовал десятки новых способов указать путь к моему объекту File, но по какой-то причине он создает файл в военных папках jboss.

Попробовал:

ServletContext app = getServletContext();
String path1 = app.getRealPath("/");
File f = new File(path1);
// AND
File f = new File("../../data.txt");

1 Ответ

2 голосов
/ 12 января 2010

Если папка /test находится в веб-контенте, то вам нужно следующее:

String absolutePath = getServletContext().getRealPath("/test/data.txt");
File file = new File(absolutePath);

или

String webcontentRoot = getServletContext().getRealPath("/");
File file = new File(webcontentRoot, "test/data.txt");

Вы это видите? Java IO понимает только пути файловой системы локального диска, но не URL-адреса или пути вне контекста. ServletContext#getRealPath() должен использоваться для преобразования относительного веб-пути в абсолютный путь файловой системы на локальном диске , который, в свою очередь, может быть использован в дальнейшем в обычном Java IO. Вы должны никогда использовать относительные пути в Java IO. Вы будете зависеть от текущего рабочего каталога, который может отличаться в зависимости от среды / ситуации.

Тем не менее, вы обычно не хотите записывать файлы в веб-контент. Они будут потеряны всякий раз, когда вы передислоцируете ВОЙНУ. Скорее создайте фиксированный путь к файловой системе диска где-нибудь за пределами веб-приложения и используйте его. Или, что еще лучше, используйте независимую базу данных SQL:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...