Класс Properties
- java.lang.Object
-
- java.util.Dictionary<K,V>
-
- java.util.Hashtable<Object,Object>
-
- java.util.Properties
- Все реализованные интерфейсы:
- Serializable, Cloneable, Map<Object,Object>
- Прямые известные подклассы:
- Provider
public class Properties extends Hashtable<Object,Object>
Класс Properties представляет собой постоянный набор свойств. Объект Properties можно сохранить в поток или загрузить из потока. Каждый ключ и соответствующее ему значение в списке свойств являются строками.
Список свойств может содержать другой список свойств в качестве "значений по умолчанию"; этот второй список свойств проверяется, если ключ свойства не найден в исходном списке свойств.
Поскольку Properties наследуется от Hashtable, методы put и putAll могут применяться к объекту Properties. Их использование настоятельно не рекомендуется, так как они позволяют вызывающему методу вставлять записи, ключи или значения которых не являются Strings. Вместо этого следует использовать метод setProperty. Если метод store или save вызывается для "скомпрометированного" объекта Properties, который содержит ключ или значение, не являющийся String, вызов завершится ошибкой. Аналогично, вызов метода propertyNames или list завершится ошибкой, если он вызывается для "скомпрометированного" объекта Properties объекта, содержащего ключ или значение, не являющийся String.
Методы load(Reader) / store(Writer, String) загружают и сохраняют свойства из и в поток символов в простом ориентированном на строки формате, указанном ниже. Методы load(InputStream) / store(OutputStream, String) работают так же, как и пара load(Reader)/store(Writer, String), за исключением того, что входной/выходной поток закодирован в кодировке символов ISO 8859-1. Символы, которые не могут быть непосредственно представлены в этой кодировке, могут быть записаны с помощью Unicode-экранирования, как определено в разделе 3.3 Спецификации языка Java™; в последовательности экранирования разрешен только один символ 'u'. Инструмент native2ascii может использоваться для преобразования файлов свойств в другие кодировки символов и обратно.
Методы loadFromXML(InputStream) и storeToXML(OutputStream, String, String) загружают и сохраняют свойства в простом формате XML. По умолчанию используется кодировка символов UTF-8, однако при необходимости может быть указана определенная кодировка. Реализации должны поддерживать UTF-8 и UTF-16 и могут поддерживать другие кодировки. Документ XML-свойств имеет следующую декларацию DOCTYPE:
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">Обратите внимание, что системный URI (http://java.sun.com/dtd/properties.dtd) не используется при экспорте или импорте свойств; он просто служит строкой для уникальной идентификации DTD, которая выглядит так:
<?xml version="1.0" encoding="UTF-8"?>
<!-- DTD for properties -->
<!ELEMENT properties ( comment?, entry* ) >
<!ATTLIST properties version CDATA #FIXED "1.0">
<!ELEMENT comment (#PCDATA) >
<!ELEMENT entry (#PCDATA) >
<!ATTLIST entry key CDATA #REQUIRED> Этот класс потокобезопасен: несколько потоков могут совместно использовать один объект Properties без необходимости внешней синхронизации.
- С:
- JDK1.0
- См. также:
- инструмент native2ascii для Solaris, инструмент native2ascii для Windows, Сериализованная форма
Поля
| Модификатор и тип | Поле и описание |
|---|---|
protected Properties |
defaults Список свойств, содержащих значения по умолчанию для любых ключей, не найденных в этом списке свойств. |
Конструкторы
| Конструктор и описание |
|---|
Properties() Создает пустой список свойств без значений по умолчанию. |
Properties(Properties defaults) Создает пустой список свойств со значениями по умолчанию. |
Методы
| Модификатор и тип | Метод и описание |
|---|---|
String |
getProperty(String key) Ищет свойство с указанным ключом в этом списке свойств. |
String |
getProperty(String key,
String defaultValue) Ищет свойство с указанным ключом в этом списке свойств. |
void |
list(PrintStream out) Выводит этот список свойств в указанный поток вывода. |
void |
list(PrintWriter out) Выводит этот список свойств в указанный поток вывода. |
void |
load(InputStream inStream) Читает список свойств (пар ключ-элемент) из входного потока байтов. |
void |
load(Reader reader) Читает список свойств (пар ключ-элемент) из входного потока символов в простом ориентированном на строки формате. |
void |
loadFromXML(InputStream in) Загружает все свойства, представленные документом XML в указанном входном потоке, в эту таблицу свойств. |
Enumeration<?> |
propertyNames() Возвращает перечисление всех ключей в этом списке свойств, включая уникальные ключи в списке свойств по умолчанию, если ключ с таким же именем уже не найден в основном списке свойств. |
void |
save(OutputStream out,
String comments) Устарело. Этот метод не генерирует исключение IOException, если при сохранении списка свойств произошла ошибка ввода-вывода. Предпочтительным способом сохранения списка свойств является использование метода |
Object |
setProperty(String key,
String value) Вызывает метод |
void |
store(OutputStream out,
String comments) Записывает этот список свойств (пар ключ-элемент) в этой таблице |
void |
store(Writer writer,
String comments) Записывает этот список свойств (пар ключ-элемент) в этой таблице |
void |
storeToXML(OutputStream os,
String comment) Выводит документ XML, представляющий все свойства, содержащиеся в этой таблице. |
void |
storeToXML(OutputStream os,
String comment,
String encoding) Выводит документ XML, представляющий все свойства, содержащиеся в этой таблице, используя указанную кодировку. |
Set<String> |
stringPropertyNames() Возвращает набор ключей в этом списке свойств, где ключ и соответствующее ему значение являются строками, включая уникальные ключи в списке свойств по умолчанию, если ключ с таким же именем еще не найден в основном списке свойств. |
Методы, унаследованные от класса java.util.Hashtable
clear, clone, compute, computeIfAbsent, computeIfPresent, contains, containsKey, containsValue, elements, entrySet, equals, forEach, get, getOrDefault, hashCode, isEmpty, keys, keySet, merge, put, putAll, putIfAbsent, rehash, remove, remove, replace, replace, replaceAll, size, toString, values Методы, унаследованные от класса java.lang.Object
finalize, getClass, notify, notifyAll, wait, wait, wait Поля
defaults
protected Properties defaults
Список свойств, содержащий значения по умолчанию для ключей, отсутствующих в этом списке свойств.
Конструкторы
Properties
public Properties()
Создаёт пустой список свойств без значений по умолчанию.
Properties
public Properties(Properties defaults)
Создаёт пустой список свойств со значениями по умолчанию.
- Параметры:
-
defaults- значения по умолчанию.
Методы
setProperty
public Object setProperty(String key,
String value) Вызывает метод Hashtable метод put. Предоставлен для обеспечения параллелизма с методом getProperty. Обеспечивает использование строк для ключей и значений свойств. Возвращаемое значение - результат вызова Hashtable к put.
- Параметры:
-
key- ключ, который нужно поместить в этот список свойств. -
value- значение, соответствующееkey. - Возвращает:
- предыдущее значение указанного ключа в этом списке свойств или
null, если его не было. - С момента:
- 1.2
- См. также:
getProperty(java.lang.String)
load
public void load(Reader reader)
throws IOException Считывает список свойств (пары ключ-элемент) из входного потока символов в простом ориентированном на строки формате.
Свойства обрабатываются в терминах строк. Есть два типа строк: естественные строки и логические строки. Естественная строка определяется как строка символов, которая завершается либо набором символов конца строки (\n или \r или \r\n) или концом потока. Естественная строка может быть пустой строкой, строкой комментария или содержать все или часть пары ключ-элемент. Логическая строка содержит все данные пары ключ-элемент, которые могут быть распределены по нескольким смежным естественным строкам путём экранирования последовательности конца строки символом обратного слэша \. Обратите внимание, что строка комментария не может быть расширена таким образом; каждая естественная строка, являющаяся комментарием, должна иметь собственный индикатор комментария, как описано ниже. Строки считываются из входного потока до достижения конца потока.
Естественная строка, содержащая только пробельные символы, считается пустой и игнорируется. Строка комментария имеет ASCII '#' или '!' в качестве своего первого непробельного символа; строки комментариев также игнорируются и не кодируют информацию о ключе-элементе. В дополнение к разделителям строк в этом формате пробельными символами считаются пробел (' ', '\u0020' ), табуляция ('\t', '\u0009' ) и возврат формы ('\f', '\u000C').
Если логическая строка распределена по нескольким естественным строкам, то обратный слэш, экранирующий последовательность конца строки, последовательность конца строки и любые пробельные символы в начале следующей строки не влияют на значения ключа или элемента. Остальная часть обсуждения синтаксического анализа ключа и элемента (при загрузке) будет предполагать, что все символы, составляющие ключ и элемент, появляются в одной естественной строке после удаления символов продолжения строки. Обратите внимание, что недостаточно только просмотреть символ, предшествующий последовательности конца строки, чтобы определить, экранирована ли последовательность конца строки; должно быть нечётное количество смежных обратных слэшей, чтобы последовательность конца строки была экранирована. Поскольку входной поток обрабатывается слева направо, чётное не нулевое число 2n смежных обратных слэшей перед разделителем строк (или где-либо ещё) кодирует n обратных слэшей после обработки экранирования.
Ключ содержит все символы в строке, начиная с первого непробельного символа и до, но не включая, первого неэкранированного '=', ':' или пробельного символа, отличного от разделителя строк. Все эти символы завершения ключа могут быть включены в ключ путём экранирования их предшествующим символом обратного слэша; например,
\:\=
будет ключом из двух символов ":=". Символы конца строки могут быть включены, используя \r и \n последовательности экранирования.
Любые пробелы после ключа пропускаются; если первым непробельным символом после ключа является '=' или ':', то он игнорируется, и любые пробельные символы после него также пропускаются. Все оставшиеся символы в строке становятся частью связанной строки элемента; если оставшихся символов нет, то элемент является пустой строкой "". После того, как идентифицированы исходные последовательности символов, составляющие ключ и элемент, выполняется обработка экранирования, как описано выше.
В качестве примера, каждая из следующих трёх строк задаёт ключ "Truth" и связанное значение элемента "Beauty":
Truth = Beauty Truth:Beauty Truth :BeautyВ качестве другого примера, следующие три строки задают одно свойство:
fruits apple, banana, pear, \
cantaloupe, watermelon, \
kiwi, mango Ключ это "fruits" а связанный элемент это: "apple, banana, pear, cantaloupe, watermelon, kiwi, mango"Обратите внимание, что перед каждым
\ находится пробел, так что после каждой запятой в окончательном результате будет пробел; \, символ конца строки и ведущие пробелы в строке-продолжении просто отбрасываются и не заменяются одним или несколькими другими символами. В качестве третьего примера, строка:
cheesesуказывает, что ключом является
"cheeses" а связанный элемент - пустая строка "". Символы в ключах и элементах могут быть представлены в последовательностях экранирования, аналогичных тем, которые используются для символов и строковых литералов (см. разделы 3.3 и 3.10.6 Спецификации языка Java™). Различия от последовательностей экранирования символов и Unicode-экранирования, используемых для символов и строк, заключаются в следующем:
- Восьмеричные escapes не распознаются.
- Последовательность символов
\bне представляет символ backspace. - Метод не обрабатывает символ обратного слэша,
\, перед недопустимым символом экранирования, как ошибку; обратный слэш молча пропускается. Например, в Java-строке последовательность"\z"вызовет ошибку компиляции. В отличие от этого, этот метод молча пропускает обратный слэш. Таким образом, этот метод обрабатывает двухсимвольную последовательность"\b"как эквивалентную одиночному символу'b'. - Экранирования не нужны для одинарных и двойных кавычек; однако, по вышеуказанному правилу, одинарные и двойные кавычки, предшествующие символу обратного слэша, по-прежнему дают одинарные и двойные кавычки соответственно.
- В последовательности Unicode-экранирования разрешен только один символ 'u'.
Указанный поток остаётся открытым после возврата из этого метода.
- Параметры:
-
reader- входной поток символов. - Исключения:
-
IOException- если произошла ошибка при чтении из входного потока. -
IllegalArgumentException- если в вводе присутствует некорректная последовательность Unicode-экранирования. - С момента:
- 1.6
load
public void load(InputStream inStream)
throws IOException Считывает список свойств (пары ключ-элемент) из входного потока байтов. Входной поток имеет простой ориентированный на строки формат, как указано в load(Reader) и предполагается, что он использует кодировку символов ISO 8859-1; то есть каждый байт представляет один символ Latin1. Символы, отсутствующие в Latin1, и определённые специальные символы, представлены в ключах и элементах с использованием Unicode-экранирования, как определено в разделе 3.3 Спецификации языка Java™.
Указанный поток остаётся открытым после возврата из этого метода.
- Параметры:
-
inStream- входной поток. - Исключения:
-
IOException- если произошла ошибка при чтении из входного потока. -
IllegalArgumentException- если входной поток содержит некорректную последовательность Unicode-экранирования. - С момента:
- 1.2
save
@Deprecated
public void save(OutputStream out,
String comments) Устаревший. Этот метод не выбрасывает исключение IOException, если при сохранении списка свойств произошла ошибка ввода-вывода. Предпочтительный способ сохранения списка свойств - через метод store(OutputStream out,
String comments) или метод storeToXML(OutputStream os, String comment).
Вызывает метод store(OutputStream out, String comments) и подавляет исключения IOException, которые были выброшены.
- Параметры:
-
out- поток вывода. -
comments- описание списка свойств. - Исключения:
-
ClassCastException- если этот объектPropertiesсодержит ключи или значения, которые не являютсяStrings.
store
public void store(Writer writer,
String comments)
throws IOException Записывает этот список свойств (пары ключ-элемент) в этой Properties таблице в выходной поток символов в формате, подходящем для использования метода load(Reader).
Свойства из таблицы значений по умолчанию этой Properties таблицы (если таковые имеются) не записываются этим методом.
Если аргумент комментариев не равен null, то сначала в выходной поток записывается ASCII # символ, строка комментариев и разделитель строк. Таким образом, comments может служить идентифицирующим комментарием. Любой из разделителей строк (символ новой строки '\n', возврат каретки '\r' или возврат каретки, непосредственно за которым следует символ новой строки) в комментариях заменяется разделителем строк, генерируемым Writer, и если следующий символ в комментариях не символ # или символ !, то после этого разделителя строк записывается ASCII #.
Далее всегда записывается строка комментария, содержащая символ ASCII #, текущую дату и время (как если бы он был произведён методом toString метода Date для текущего времени) и разделитель строк, генерируемый Writer.
Затем записывается каждая запись в этой Properties таблице, по одной на строку. Для каждой записи записывается строка ключа, затем ASCII =, а затем связанная строка элемента. Для ключа все пробельные символы записываются с предшествующим символом \. Для элемента ведущие пробельные символы, но не вложенные или заключительные пробельные символы, записываются с предшествующим символом \. Символы ключа и элемента #, !, =, и : записываются с предшествующим символом обратного слэша, чтобы обеспечить их правильную загрузку.
После записи записей выходной поток сбрасывается. Выходной поток остаётся открытым после возврата из этого метода.
- Параметры:
-
writer- поток для записи символов вывода. -
comments- описание списка свойств. - Исключения:
-
IOException- если запись этого списка свойств в указанный поток вывода вызываетIOException. -
ClassCastException- если этот объектPropertiesсодержит ключи или значения, которые не являютсяStrings. -
NullPointerException- еслиwriterравно null. - С момента:
- 1.6
store
public void store(OutputStream out,
String comments)
throws IOException Записывает этот список свойств (пары ключ-значение) в этой Properties таблице в поток вывода в формате, подходящем для загрузки в Properties таблицу с помощью метода load(InputStream).
Свойства из таблицы по умолчанию этой Properties таблицы (если таковые имеются) не записываются этим методом.
Этот метод выводит комментарии, ключи и значения свойств в том же формате, что и указано в store(Writer), с следующими отличиями:
- Поток записывается с использованием кодировки символов ISO 8859-1.
- Символы, отсутствующие в Latin-1, в комментариях записываются как
\uxxxx для соответствующего шестнадцатеричного значения Unicode xxxx. - Символы, меньшие
\u0020и символы, большие\u007Eв ключах или значениях свойств, записываются как\uxxxx для соответствующего шестнадцатеричного значения xxxx.
После записи записей поток вывода сбрасывается. Поток вывода остается открытым после возврата этого метода.
- Параметры:
-
out- поток вывода. -
comments- описание списка свойств. - Исключения:
-
IOException- если запись этого списка свойств в указанный поток вывода вызываетIOException. -
ClassCastException- если этот объектPropertiesсодержит ключи или значения, которые не являютсяStrings. -
NullPointerException- еслиoutравно null. - С момента:
- 1.2
loadFromXML
public void loadFromXML(InputStream in)
throws IOException,
InvalidPropertiesFormatException Загружает все свойства, представленные XML-документом в указанном потоке ввода, в эту таблицу свойств.
XML-документ должен иметь следующее объявление DOCTYPE:
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">Кроме того, документ должен соответствовать описанному выше DTD свойств.
Реализация обязана читать XML-документы, использующие кодировку "UTF-8" или "UTF-16". Реализация может поддерживать дополнительные кодировки.
Указанный поток закрывается после возврата этого метода.
- Параметры:
-
in- поток ввода, из которого следует читать XML-документ. - Исключения:
-
IOException- если чтение из указанного потока ввода приводит кIOException. -
UnsupportedEncodingException- если объявление кодировки документа можно прочитать, и оно указывает кодировку, которая не поддерживается -
InvalidPropertiesFormatException- Данные в потоке ввода не представляют собой допустимый XML-документ с требуемым типом документа. -
NullPointerException- еслиinравно null. - С момента:
- 1.5
- См. также:
-
storeToXML(OutputStream, String, String), Кодировка символов в сущностях
storeToXML
public void storeToXML(OutputStream os,
String comment)
throws IOException Выводит XML-документ, представляющий все свойства, содержащиеся в этой таблице.
Вызов этого метода в форме props.storeToXML(os, comment) ведет себя точно так же, как вызов props.storeToXML(os, comment, "UTF-8");.
- Параметры:
-
os- поток вывода, в который следует вывести XML-документ. -
comment- описание списка свойств илиnullесли комментарий не требуется. - Исключения:
-
IOException- если запись в указанный поток вывода приводит кIOException. -
NullPointerException- еслиosравно null. -
ClassCastException- если этот объектPropertiesсодержит ключи или значения, которые не являютсяStrings. - С момента:
- 1.5
- См. также:
loadFromXML(InputStream)
storeToXML
public void storeToXML(OutputStream os,
String comment,
String encoding)
throws IOException Выводит XML-документ, представляющий все свойства, содержащиеся в этой таблице, с использованием указанной кодировки.
XML-документ будет иметь следующее объявление DOCTYPE:
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
Если указанный комментарий null , то комментарий не будет сохранён в документе.
Реализация обязана поддерживать запись XML-документов, использующих кодировку "UTF-8" или "UTF-16". Реализация может поддерживать дополнительные кодировки.
Указанный поток остается открытым после возврата этого метода.
- Параметры:
-
os- поток вывода, в который следует вывести XML-документ. -
comment- описание списка свойств, илиnullесли комментарий не требуется. -
encoding- имя поддерживаемой кодировки символов - Исключения:
-
IOException- если запись в указанный поток вывода приводит кIOException. -
UnsupportedEncodingException- если кодировка не поддерживается реализацией. -
NullPointerException- еслиosявляетсяnull, или еслиencodingявляетсяnull. -
ClassCastException- если этот объектPropertiesсодержит ключи или значения, которые не являютсяStrings. - С момента:
- 1.5
- См. также:
-
loadFromXML(InputStream), Кодировка символов в сущностях
getProperty
public String getProperty(String key)
Ищет свойство с указанным ключом в этом списке свойств. Если ключ не найден в этом списке свойств, то затем проверяется список свойств по умолчанию и его значения по умолчанию рекурсивно. Метод возвращает null если свойство не найдено.
- Параметры:
-
key- ключ свойства. - Возвращает:
- значение в этом списке свойств с указанным ключом.
- См. также:
-
setProperty(java.lang.String, java.lang.String),defaults
getProperty
public String getProperty(String key,
String defaultValue) Ищет свойство с указанным ключом в этом списке свойств. Если ключ не найден в этом списке свойств, то затем проверяется список свойств по умолчанию и его значения по умолчанию рекурсивно. Метод возвращает аргумент значения по умолчанию, если свойство не найдено.
- Параметры:
-
key- ключ хеш-таблицы. -
defaultValue- значение по умолчанию. - Возвращает:
- значение в этом списке свойств с указанным ключом.
- См. также:
-
setProperty(java.lang.String, java.lang.String),defaults
propertyNames
public Enumeration<?> propertyNames()
Возвращает перечисление всех ключей в этом списке свойств, включая уникальные ключи в списке свойств по умолчанию, если ключ с таким же именем уже не был найден из основного списка свойств.
- Возвращает:
- перечисление всех ключей в этом списке свойств, включая ключи в списке свойств по умолчанию.
- Исключения:
-
ClassCastException- если какой-либо ключ в этом списке свойств не является строкой. - См. также:
-
Enumeration,defaults,stringPropertyNames()
stringPropertyNames
public Set<String> stringPropertyNames()
Возвращает набор ключей в этом списке свойств, где ключ и его соответствующее значение являются строками, включая уникальные ключи в списке свойств по умолчанию, если ключ с таким же именем уже не был найден из основного списка свойств. Свойства, у которых ключ или значение не являются типа String , опускаются.
Возвращаемый набор не поддерживается объектом Properties. Изменения в этом Properties не отражаются в наборе, и наоборот.
- Возвращает:
- набор ключей в этом списке свойств, где ключ и соответствующее значение являются строками, включая ключи в списке свойств по умолчанию.
- С момента:
- 1.6
- См. также:
defaults
list
public void list(PrintStream out)
Выводит этот список свойств в указанный поток вывода. Этот метод полезен для отладки.
- Параметры:
-
out- поток вывода. - Исключения:
-
ClassCastException- если какой-либо ключ в этом списке свойств не является строкой.
list
public void list(PrintWriter out)
Выводит этот список свойств в указанный поток вывода. Этот метод полезен для отладки.
- Параметры:
-
out- поток вывода. - Исключения:
-
ClassCastException- если какой-либо ключ в этом списке свойств не является строкой. - С момента:
- JDK1.1
© 1993, 2020, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.