всякий раз, когда я читаю или записываю файл в сервлет с помощью new File()
без использования абсолютного пути, путь, который я получаю, находится внутри папки eclipse. Я не знаю, что происходит. Есть ли у кого-нибудь идеи проблемы, с которыми я столкнулся.Чтение внешнего файла из сервлета
ответ
В основном вы не должны просто использовать относительные имена файлов в сервлетах: контейнер сервлетов предоставит вам сопоставления для некоторых мест расположения каталогов, и если вам нужно что-то еще, вы должны указать это в своих параметрах сервлета.
Например, посмотрите на ServletContext.getRealPath
.
Если вы можете рассказать нам больше о том, что вы пытаетесь сделать, это поможет.
Если для чтения файлов конфигурации вы должны использовать ServletContext.getResourceAsStream(java.lang.String path)
, метод вернет InputStream из ресурса, на который вы ссылались, и я советую хранить такие файлы в папке WEB-INF.
Если вы хотите писать файлы, вы всегда должны предоставлять (желательно в настраиваемом месте) абсолютный путь к каталогу, в который вы должны вписать, а также убедиться, что он существует и имеет соответствующие разрешения для такой операции.
Это связано с тем, что рабочий каталог eclipse по умолчанию является папкой проекта. Если и хочет, чтобы записать файл в указанной папке, используя относительный путь, который я предлагаю вам сделать это:
- перейти в меню «Выполнить» в затмении
- выбрать «конфигурацию Run ...»
- нажмите вкладка «Аргументы»
- Установите рабочий каталог под вкладкой «Параметры». Выберите «Другое» и укажите каталог.
Это означает, что ваш проект претендует на выполнение в указанном каталоге.
Надеюсь, я помог удачи.
Возможный дубликат [getResourceAsStream() vs FileInputStream] (http://stackoverflow.com/questions/2308188/getresourceasstream-vs-fileinputstream) – BalusC