Добавил:
ИВТ (советую зайти в "Несортированное") Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
1
Добавлен:
23.11.2024
Размер:
34.73 Кб
Скачать
  1. Работа с конфигурационными файлами

В Java можно использовать как распространенный формат конфигурационного файла ini (*.ini), так и собственный формат файла свойств properties (*.properties).

Конфигурационные файлы это текстовые файлы, содержащие пары: ключ=значение

Для пояснения содержимого конфигурацонных файлов используются комментарии. Для файлов *.ini кооментарии предваряются символами # или ;, а для файлов *.properties - # или !.

Ini-файлы конфигурации располагают несколько большим количеством возможностей, например, делением на секции (см. https://ru.wikipedia.org/wiki/.ini), нежели *.properties (см. https://ru.wikipedia.org/wiki/.properties ) однако в Java по умолчанию не предусмотрена обработка этих дополнительных возможностей.

Для работы с конфигурационными файлами обоих типов в Java можно использовать класс java.util.Properties, метод load которого загружает пары ключ=значение из конфигурационного файла в ассоциативный массив. При этом и ключи и значения являются строками. Для работы с ключами и значениями как с другими типами данных требуется ипсользовать операции приведения типов, например:

APP_INT_VALUE = Integer.valueOf(props.getProperty("APP_INT_VALUE", "1"));

Посокльку конфигурационный файл должен читаться в начале запуска программы, а при запуске программы из исполняемого jar путь к конфигурационному файлу может быть иным, нежели на компьютере разработчика, то для этого случая применяют закгрузку конфигурационного файла как потокового ресурса класса - class.getResourceAsStream(FileName). В этом случае конфигурационный файл ищется в том-же пакете, что и класс.

    1. Пример класса preloader для загрузки конфигурационного файла

package auto;

import java.io.BufferedReader;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.FileReader;

import java.io.IOException;

import java.io.InputStream;

import java.util.Properties;

/**

*

* @author Андрей

*/

public class Preloader {

public Preloader(String FileName, Properties props) throws IOException, Exception {

getConfigFile(FileName, props);

Preloader.class.getResource("config.ini");

}

private static void getConfigFile(String FileName, Properties props) throws FileNotFoundException, IOException, Exception {

InputStream fs;

try {

File f = new File(FileName);

//System.out.println(f.canRead()+" "+f.canWrite()+" "+f.getAbsolutePath());

if(f.exists()) {

fs = new FileInputStream(f);

} else {

fs = Preloader.class.getResourceAsStream(FileName);

}

props.load(fs);

System.out.println("Конфигурация загружена");

fs.close();

} catch (FileNotFoundException e) {

System.err.println("Конфигурационный файл не найден. Ошибка - "+e.getMessage());

} catch (IOException e) {

System.err.println("Конфигурационный файл не читается. Ошибка - "+e.getMessage());

} catch (Exception e) {

throw new Exception("Ошибка загрузки конфигурационного файла. Ошибка - "+e.getMessage());

}

}

}

Использование класса Preloader в основной программе

package auto;

import controller.Main;

import java.util.Properties;

import java.util.Scanner;

import model.Body;

import model.doors.Dictionaries;

import view.Menu;

/**

*

* @author Андрей

*/

public class Common {

public static Body model;

public static Main controller;

public static Menu view;

public static Properties prop;

/**

* @param args the command line arguments

*/

public static void main(String[] args) {

/*

0. Загружаем данные конфигурации

1. Инициализируем модель

2. Инициируем представление

3. Инициализируем контроллер и передаем туда модель и представление

4. Запускаем бесконечный цикл в котором просматриваем результат меню на выход

*/

try {

prop = new Properties();

//Нужно не забыть сделать ресурсом, чтобы запускался из jar

//Preloader PRL = new Preloader("src/auto/config.ini", prop);

Preloader PRL = new Preloader("config.ini", prop);

model = new Body();

view = new Menu();

controller = new Main(model, view, prop);

boolean run = true;

while(run) {

run = controller.swichMenu();

}

} catch (Exception e) {

System.err.println("Ошибка - "+e.getMessage());

}

}

}