Схема URI-это не "файл". Невозможно прочитать файл из пути к классу


У меня есть Java webapp, и я пытаюсь прочитать файл из classpth.

 if (fileName == null){
        fileName = Thread.currentThread().getContextClassLoader().getResource("config.properties");
    }
objFile = new File(fileName.toURI());

У меня есть конфиг.свойства в моем пути к классу. WEB-INF / классы. Когда я проверяю локально, он дает: fileName.toURI(), он дает мне file:/D:/dev/Tomcat_6_0/webapps/testApp/WEB-INF/classes/config.properties. И прекрасно работает.

Проблема на производственном сервере linux я получаю этот путь там vfsfile:/export/home/u/bin/jboss-5.1.0.BE/server/default/deploy/testApp.war/WEB-INF/classes/config.properties.

И я получаю следующее исключение.

Caused by: java.lang.IllegalArgumentException: URI scheme is not "file"
    at java.io.File.<init>(File.java:366)
    at com.utils.ConfigLoader.loadConfigFilePath(ConfigLoader.java:87)

Что такое решение для оформления ВФС?

2 2

2 ответа:

Не следует пытаться преобразовать ресурс из пути к классу в файл. Это может быть даже не файл, если он находится внутри WAR / JAR. Класс File представляет только объекты файловой системы.

Поскольку вы загружаете ресурсы (а они могут быть или не быть файлами, просто представьте этот файл свойств, упакованный в jar/war), почему бы вам не использовать openStream() на объекте URL? Затем просто считайте содержимое из BufferedStream, и все!