Прежде всего, никогда не используйте ClassLoader#getSystemResourceAsStream()
в веб-приложении Java EE.Вместо этого используйте ClassLoader#getResourceAsStream()
.Я также поставил бы большой вопрос об использовании ClassLoader#getSystemResourceAsStream()
в настольном приложении Java SE, чтобы точно определить, должно ли оно быть распространяемым, но это в стороне.
ClassLoader
в конечном итоге загружает ресурсы из пути к классам.Поэтому все, что вам нужно сделать, - это убедиться, что файл помещен в один из путей, которые по умолчанию включены в classpath времени выполнения веб-приложения, или , чтобы добавить новый путь к файлу во время выполнения веб-приложения.classpath через параметр конфигурации, специфичный для сервера, такой как shared.loader
свойство Tomcat /conf/catalina.properties
.
. Одним из путей по умолчанию, охватываемых classpath времени выполнения веб-приложения, является папка /WEB-INF/classes
WAR.С точки зрения проекта IDE, просто поместите файл в корневую папку папки «Java Source» (src), где у вас есть все ваши пакеты и классы Java.IDE позаботится о том, чтобы в конечном итоге она оказалась в /WEB-INF/classes
встроенного файла WAR.
Кстати, я все еще предполагаю, что вы не создаете файл изнутри веб-приложения,как вы прямо сказали.Это не сработает.Если вам на самом деле также необходим доступ на запись, вам потребуется абсолютный путь к файловой системе диска.Вы всегда можете сделать его настраиваемым, указав его, например, в качестве аргумента виртуальной машины или переменной среды.