Будет ли InputStreamReader getResourceAsStream работать в Linux? - PullRequest
1 голос
/ 19 декабря 2011

У меня есть этот код в приложении Java EE для чтения файла свойств.Несмотря на то, что Myservice.properties находится в папке WEB-INF/classes, свойства не читаются в среде Linux, но работают нормально в среде Windows.

InputStreamReader fMainProp = new InputStreamReader(this.getClass().getResourceAsStream("/Myservice.properties"));

Будет ли работать выше, толькоокна?

MyWeb() {
    prop = new Properties();
    try {
        InputStreamReader fMainProp = new InputStreamReader(this.getClass().getResourceAsStream("/Myservice.properties"));
        prop.load(fMainProp);
    } catch (FileNotFoundException e1) {
        e1.printStackTrace();
    } catch (IOException e1) {
        e1.printStackTrace();
    }
}

1 Ответ

4 голосов
/ 19 декабря 2011

Работает ли этот код, зависит от того, имеет ли загрузчик классов, который загрузил вызывающий класс, представленный в вашем коде getClass(), доступ к /WEB-INF/classes.По-видимому, рассматриваемый класс сам по себе не находится внутри /WEB-INF/classes или имеет копию, которая размещена в другом месте в пути к классам, и в make / version сервера, используемой в среде Linux, используется несколько иная иерархия загрузчика классов, чем в версии / сервере, используемой вСреда Windows.

Факт: если вы не можете гарантировать, что файл свойств будет загружен тем же загрузчиком классов, что и вызывающий класс, то вам не следует пытаться получить его загрузчиком классов вызывающего класса., но загрузчиком класса контекста текущего потока.Он имеет доступ ко всему.

prop.load(Thread.currentThread().getContextClassLoader().getResourceAsStream("Myservice.properties"));

Обратите внимание, что с этим загрузчиком классов путь не может быть относительным.Так что не начинайте с косой черты.

...