Как мне прочитать файл .properties без вызова его абсолютного пути - PullRequest
1 голос
/ 07 июля 2011

У меня есть файл .properties в

com.someOtherpage
 -somefolder
  --theProperties.java  `<--- This guy needs it`
com.somepackage
WEB-INF
 -config
  --project.properties  `<--- Here is where he sits`

при развертывании, как я могу вызвать файл свойств без вызова его абсолютного пути, как показано ниже

public class theProperties
{
  private static Properties properties = new Properties();

  public theProperties()
  {
  }

  public String get(String attribute) throws Exception
  {
     //what do I need to set up to be able to call this file this way 
     //notice there is no '../../project.properties'
     //                    -----
    InputStream is = theProperties.class.getResourceAsStream("project.properties");
    properties.load(is);

    is.close();

    return properties.getProperty(attribute);
  }
}

Выше не работает, почему?

Ответы [ 3 ]

4 голосов
/ 07 июля 2011

Если вы поместите файл properties в тот же пакет, что и класс, который его читает, вы указываете его путь относительно этого класса, то есть, если файл свойств находится в том же пакете, что и класс, загружающий его, вы указываете путь как project.properties.

Если вы поместили файл свойств в пакет по умолчанию, а класс загрузки не в пакет по умолчанию, вы должны указать абсолютный путь, например, /project.properties. Просто напоминание, что классы не должны быть в пути к классам по умолчанию как общее правило.

В любом случае, ваш файл свойств должен быть на classpath , а ваш нет. Другими словами, он должен быть где-то в WEB-INF/classes/.

Лучшее, но более сложное решение - использовать Guice для ввода свойств , а не писать собственный читатель.

2 голосов
/ 07 июля 2011

вот хорошее объяснение того, как ... http://jaitechwriteups.blogspot.com/2007/01/how-to-read-properties-file-in-web.html

0 голосов
/ 07 июля 2011

Предполагая, что вы хотите избежать абсолютного filepath , а не абсолютного пути в classpath, вам нужно сделать:

theProperties.class.getResourceAsStream("/WEB-INF/config/project.properties")

Косая черта спереди важна. Без него путь указывается относительно местоположения пакета класса загрузки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...