Java-приложение не читает файл свойств без установки рабочей папки в IDE - PullRequest
0 голосов
/ 06 марта 2012

Я занимаюсь разработкой Java-приложения (не веб-приложения, сервера и т. Д.) С использованием среды IDE Netbeans 7.0.1. Прямо сейчас у меня проблема с чтением любых свойств / или любого другого файла из моего класса Java.

Вот что я делаю

 FileReader f = new FileReader( new File(args[0]) );
 BufferedReader r = new BufferedReader(f);

в аргументе я передаю имя файла как connector.properties (у меня есть файл в том же пакете, что и этот класс). проект при запуске выдает ошибку ниже

Can't load: connector.properties : Exception is: connector.properties (The system cannot find the path specified)

почему я не могу прочитать файл свойств? Каков корень моего пути к классам?

когда я установил 'Working Folder' (щелкнув правой кнопкой мыши по проекту и выбрав раздел «Выполнить») на уровне пакета, например C/complete/path/to/the/package только тогда файл свойств читается.
Я хочу знать, почему мне нужно установить рабочую папку в проекте Netbeans и как я могу прочитать файл без установки рабочей папки?

Ответы [ 4 ]

1 голос
/ 06 марта 2012

Это потому, что вы не используете программу чтения пути к классам для чтения файла свойств. Ваш код выше читает жесткий путь.

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

0 голосов
/ 02 ноября 2014
Properties properties = new Properties();
String propertiesFileName = "config.properties";

InputStream inputStream = getClass().getClassLoader().getResourceAsStream(propertiesFileName);
properties.load(inputStream);

Этот код поможет вам при чтении файла свойств.

0 голосов
/ 06 марта 2012

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

0 голосов
/ 06 марта 2012

Вы можете использовать this.getClass().getResourceAsStream(), чтобы получить поток, а затем использовать .load:

для загрузки свойств. Это легко распространяется на чтение любого файла в пути к классам.

...