Я развернул проект и запустил на сервере,
Это звучит как веб-приложение JSP / Servlet. В этом случае вам нужно использовать ClassLoader
, который получается следующим образом:
ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
У этого есть доступ к всем путям пути к классам, связанным с рассматриваемым веб-приложением, и вы больше не зависите от того, какой родительский загрузчик классов (веб-приложение имеет более одного!) Загрузил ваш класс.
Затем в этом загрузчике классов вам нужно просто вызвать getResourceAsStream()
, чтобы получить ресурс classpath в виде потока, а не getSystemResourceAsStream()
, который зависит от того, как запускается веб-приложение. Вы также не хотите зависеть от этого, поскольку у вас нет контроля над ним на внешнем хостинге:
InputStream input = classLoader.getResourceAsStream("filename.extension");
Это, наконец, более надежно, чем ваш первоначальный getSystemResourceAsStream()
подход и Class#getResourceAsStream()
, как предлагали другие.