Есть ли эквивалент java.util.Properties для наборов?

Я хочу читать строки из файла в Set или List. А есть стандартная утилита для этого?

Если эти строки имеют вид [ключ] = [значение], я могу сделать:

Properties properties = new Properties();
properties.load(new FileInputStream(file));

Значения представляют собой отдельные записи, по одной в строке, каждое значение становится записью в Set / List.

Я знаю, что это можно сделать с помощью LineReader, InputStreams и множества шаблонов, но я стараюсь этого избежать.


person Rich Seller    schedule 07.07.2009    source источник


Ответы (2)


да, сам класс Properties предоставляет методы доступа для преобразований:

public Set ‹Map.Entry> entrySet ()

Возвращает представление KeySet сопоставлений, содержащихся на этой карте. Набор подкреплен картой, поэтому изменения на карте отражаются в наборе, и наоборот. Если карта изменяется во время итерации по набору (за исключением собственной операции удаления итератора или операции setValue для записи карты, возвращаемой итератором), результаты итерации не определены. Набор поддерживает удаление элемента, которое удаляет соответствующее отображение с карты с помощью операций Iterator.remove, Set.remove, removeAll, keepAll и clear. Он не поддерживает операции add или addAll.

public Set ‹K> keySet ()

Возвращает представление KeySet ключей, содержащихся на этой карте. Набор подкреплен картой, поэтому изменения на карте отражаются в наборе, и наоборот. Если карта изменяется во время итерации по набору (за исключением собственной операции удаления итератора), результаты итерации не определены. Набор поддерживает удаление элемента, которое удаляет соответствующее отображение с карты с помощью операций Iterator.remove, Set.remove, removeAll, keepAll и clear. Он не поддерживает операции add или addAll.

в качестве альтернативы вы можете перечислить свойство с помощью elements ()

person dfa    schedule 07.07.2009
comment
Спасибо, я предположил, что это не удастся, потому что значение будет нулевым, похоже, что это делает запись ключом с суффиксом =. Один комментарий к вашему ответу, похоже, что дженерики интерпретируются как html. - person Rich Seller; 07.07.2009
comment
отредактируйте мой комментарий выше, значением является пустая строка, поэтому запись toString () становится [key] = - person Rich Seller; 07.07.2009

Если под стандартной утилитой вы имеете в виду стороннюю библиотеку, то мой ответ: почти!

Apache Commons достоин того, чтобы быть частью практически любого приложения Java. Используя IOUtils из Apache Commons, вы можете добиться того, что вы описываете, сделав следующее:

    final List list = IOUtils.readLines(new FileInputStream(file));
    Set<String> set = new HashSet<String>(list);

Набор будет содержать каждую строку из файла.

Примечание. IOUtils не поддерживает обобщения, поэтому этот фрагмент кода выдаст предупреждение о компиляции.

person Steve McLeod    schedule 07.07.2009
comment
Не уверен, почему это было отвергнуто, мне кажется разумным ответом. Преимущество этого подхода в том, что у вас есть Set, а не карта. Недостатком является то, что он не игнорирует комментарии и т. Д. В файле, поэтому вам нужно обработать их самостоятельно или убедиться, что их нет. - person Rich Seller; 07.07.2009