Как оптимизировать метод для работы с разными файлами?

185
02 июля 2018, 22:00

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

public void addToDictionary(String key, String value){
        if (key.matches("[A-z]{4}")){
            propFile.setProperty(key, value);
            try {
                propFile.store(new PrintWriter(new FileOutputStream(propConsole.getProperty(fileName)), true), null);
            } catch (IOException e) {
                e.printStackTrace();
            }
            map.put(key, value);
            System.out.println(propConsole.getProperty("successful.entry"));
        }
        else
            System.out.println(propConsole.getProperty("error.entry"));
    }

Для остальных методов так сделать получилось, вот пример

public void delete(String key){
        map.entrySet().removeIf(next -> next.getKey().equals(key));
        propFile.remove(key);
        try {
            propFile.store(new PrintWriter(new FileOutputStream(propConsole.getProperty(fileName)), true), null);
        } catch (IOException e) {
            e.printStackTrace();
        }
        System.out.println(propConsole.getProperty("remove.entry"));
    }

fileName - я инициализирую при загрузке класса

 public void startProgram(){
        do {
            System.out.println(properties.getProperty("choice"));
            choice = scanner.nextLine();
            if (choice.equals("1")) {
                dictionary.loadDictionaryFromFile("dictionary.char");
                break;
            }else if (choice.equals("2")) {
                dictionary.loadDictionaryFromFile("dictionary.number");
                break;
            }
        }while (!choice.equals("1") || !choice.equals("2"));
Answer 1

Определите в классе два поля и проинициализируйте их в конструкторе

class MyDictionary {
  private final String fileName;
  private final String keyMatch;
  public MyDictionary(String fileName, String keyMatch) {
    this.fileName = fileName;
    this.keyMatch = keyMatch;
  }

А дальше просто обращайтесь к ним

public void addToDictionary(String key, String value){
  if (key.matches(keyMatch)){

Если у вас создание объекта класса и связывание его со словарем разные операции, то добавьте регулярное выражение параметром в метод loadDictionaryFromFile()

void loadDictionaryFromFile (String fileName, String keyMatch) {
  this.fileName = fileName;
  this.keyMatch = keyMatch;
  ..............
}

(тогда нужно будет убрать модификаторы final из объявления полей)

READ ALSO
Не заполняется поле “Дата рождения” в Selenium Web driver

Не заполняется поле “Дата рождения” в Selenium Web driver

Не заполняется поле "Дата рождения" при запуске тест passed, сделал проверку на заполнение полей, выдает асертЭлемент находит, но почему-то пропускает...

153
Java и самоподписанные SSL сертификаты

Java и самоподписанные SSL сертификаты

Стоит сервер - клиентское приложение , использующее в своей работе Java и TomCatПри соединении клиентского приложения с серверной частью по протоколу...

204
Как реализовать вывод фотографий через JSON запрос к серверу?

Как реализовать вывод фотографий через JSON запрос к серверу?

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

172
Встраивание карт в приложение на Java

Встраивание карт в приложение на Java

Мне необходимо встроить карты в моё оконное приложение на Java, не обязательно google-карты, мне нужно лишь находить место по заданным координатам,...

236