Прочитайте значения из файла свойств - PullRequest
2 голосов
/ 04 августа 2011

Я создал динамический веб-проект в Eclipse и написал простой код для чтения из файла свойств.
Вот мой код

public class AutocompleteService {

public static void main (String args[])
{
  Properties properties = new Properties(); 
  properties.load(new FileInputStream("autocomplete.properties"));
  System.out.println("Test : " + properties.getProperty("test"));   
}  

Когда я запускаю этот файл, я получаю исключение не найденный файл,

java.io.FileNotFoundException: autocomplete.properties (The system cannot find the file specified)

Моя структура пакета выглядит следующим образом:

-src
 - com.serive (package)
   - AutocompleteService.java
   - autocomplete.properties   

И AutocompleteService.java, и autocomplete.properties находятся в одном пакете, т.е. com.service. Нужно ли нам что-либо еще читать изфайл свойств?

Ссылка: http://www.exampledepot.com/egs/java.util/Props.html

~ Аджинкья.

Ответы [ 5 ]

7 голосов
/ 04 августа 2011

вы должны загрузить это из classpath: ex

ClassLoader loader = Thread.currentThread().getContextClassLoader();
stream = loader.getResourceAsStream(fileName);

Когда у вас есть поток, вы можете передать его в properties.load ()

5 голосов
/ 04 августа 2011

Получите поток относительно вашего класса:

AutocompleteService.class.getResourceAsStream("autocomplete.properties")
2 голосов
/ 04 августа 2011

«Текущий» каталог - это то место, откуда вы запустили сервер, поэтому обратитесь к своему файлу относительно этого, например, "config/autocomplete.properties" или где угодно.

Лучший подход - знать в чем проблема. Используйте такой код, который поможет вам отладить проблему:

File propertiesFile = new File("config/autocomplete.properties");
if (!propertiesFile.exists())
    throw new IllegalStateException("Could not find properties file: " + propertiesFile.getAbsolutePath());
properties.load(new FileInputStream(file));

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

2 голосов
/ 04 августа 2011

Ваш код просматривается в "текущем каталоге" при запуске приложения.

Используйте Class.getResourceAsStream() для чтения из того же места, что и классы.

0 голосов
/ 04 августа 2011

При создании входного потока с использованием относительного пути будет пытаться открыть файл в текущем каталоге запущенной программы. В вашем случае текущим каталогом является каталог выполнения вашего контейнера сервлета (Tomcat, Jetty и т. Д.)

Что вы хотите сделать, это открыть файл свойств, который находится вместе с вашими классами, в файле war. Таким образом, этот файл свойств должен быть загружен загрузчиком классов, и использование Class.getResourceAsStream() является подходящим способом. Посмотрите на связанный javadoc, чтобы понять, какой путь указывать в качестве аргумента.

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