Свойства класса
- Все реализованные интерфейсы:
-
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, содержащем нестроковый ключ или значение, вызов завершится ошибкой. Аналогично, вызов метода propertyNames или list завершится ошибкой, если он вызывается на объекте Properties, содержащем нестроковый ключ.
Итераторы, возвращаемые методом iterator представлений коллекции этого класса (то есть entrySet(), keySet(), и values()), могут не быть fail-fast (в отличие от реализации Hashtable). Эти итераторы гарантированно перебирают элементы, как они существовали при создании, ровно один раз и, возможно (но не гарантируется), отражают любые изменения после создания.
Методы load(Reader) / store(Writer, String) загружают и сохраняют свойства из и в поток символов в простом ориентированном на строки формате, указанном ниже. Методы load(InputStream) / store(OutputStream, String) работают так же, как пара load(Reader)/store(Writer, String), за исключением того, что ввод/вывод потока закодирован в кодировке символов ISO 8859-1. Символы, которые не могут быть непосредственно представлены в этой кодировке, могут быть записаны с использованием экранирования Unicode, как определено в разделе 3.3 спецификации языка Java; в последовательности экранирования разрешено только один символ 'u'.
Методы 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 без необходимости внешней синхронизации.
- Примечание API:
- Класс
Propertiesне наследует понятие коэффициента загрузки от своего суперкласса,Hashtable. - С тех пор:
- 1.0
- См. также:
Краткое описание полей
| Модификатор и тип | Поле | Описание |
|---|---|---|
protected Properties |
defaults |
Список свойств, содержащий значения по умолчанию для любых ключей, отсутствующих в этом списке свойств. |
Краткое описание конструкторов
| Конструктор | Описание |
|---|---|
Properties() |
Создаёт пустой список свойств без значений по умолчанию. |
Properties |
Создаёт пустой список свойств без значений по умолчанию с начальным размером, рассчитанным для указанного количества элементов без необходимости динамического изменения размера. |
Properties |
Создаёт пустой список свойств со специфицированными значениями по умолчанию. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
String |
getProperty |
Ищет свойство со специфицированным ключом в этом списке свойств. |
String |
getProperty |
Ищет свойство со специфицированным ключом в этом списке свойств. |
void |
list |
Выводит этот список свойств в указанный поток вывода. |
void |
list |
Выводит этот список свойств в указанный поток вывода. |
void |
load |
Считывает список свойств (пар ключ-элемент) из входного потока байтов. |
void |
load |
Считывает список свойств (пар ключ-элемент) из входного потока символов в простом ориентированном на строки формате. |
void |
loadFromXML |
Загружает все свойства, представленные документом XML в указанном входном потоке, в эту таблицу свойств. |
Enumeration<?> |
propertyNames() |
Возвращает перечисление всех ключей в этом списке свойств, включая уникальные ключи в списке свойств по умолчанию, если ключ с тем же именем ещё не найден в основном списке свойств. |
void |
save |
Устаревший. Этот метод не генерирует исключение IOException, если при сохранении списка свойств возникнет ошибка ввода-вывода. |
Object |
setProperty |
Вызывает метод Hashtable put. |
void |
store |
Записывает этот список свойств (пар ключ-элемент) в эту таблицу Properties в выходной поток в формате, подходящем для загрузки в таблицу Properties с помощью метода load(InputStream). |
void |
store |
Записывает этот список свойств (пар ключ-элемент) в эту таблицу Properties в выходной поток символов в формате, подходящем для использования метода load(Reader). |
void |
storeToXML |
Выводит документ XML, представляющий все свойства, содержащиеся в этой таблице. |
void |
storeToXML |
Выводит XML-документ, представляющий все свойства, содержащиеся в этой таблице, с использованием указанной кодировки. |
void |
storeToXML |
Выводит XML-документ, представляющий все свойства, содержащиеся в этой таблице, с использованием указанной кодировки. |
Set<String> |
stringPropertyNames() |
Возвращает неизменяемый набор ключей из этого списка свойств, где ключ и его соответствующее значение являются строками, включая уникальные ключи в списке свойств по умолчанию, если ключ с таким же именем ещё не найден в основном списке свойств. |
Методы, объявленные в классе java.util.Hashtable
clear, clone, compute, computeIfAbsent, computeIfPresent, contains, containsKey, containsValue, elements, entrySet, equals, get, hashCode, isEmpty, keys, keySet, merge, put, putAll, rehash, remove, size, toString, values
Методы, объявленные в классе java.lang.Object
finalize, getClass, notify, notifyAll, wait, wait, wait
Методы, объявленные в интерфейсе java.util.Map
forEach, getOrDefault, putIfAbsent, remove, replace, replace, replaceAll
Подробное описание полей
defaults
protected volatile Properties defaults
Подробное описание конструкторов
Свойства
public Properties()
- Примечание реализации:
- Начальная ёмкость объекта
Properties, созданного с помощью этого конструктора, не определена.
Свойства
public Properties(int initialCapacity)
- Параметры:
-
initialCapacity- ёмкость списка свойств, необходимая для размещения этого количества элементов. - Исключения:
-
IllegalArgumentException- если начальная ёмкость меньше нуля.
Свойства
public Properties(Properties defaults)
- Примечание реализации:
- Начальная ёмкость объекта
Properties, созданного с помощью этого конструктора, не определена. - Параметры:
-
defaults- значения по умолчанию.
Подробное описание методов
setProperty
public Object setProperty(String key, String value)
Hashtable put. Предоставлено для параллелизма с методом getProperty. Обеспечивает использование строк для ключей и значений свойств. Возвращаемое значение является результатом вызова Hashtable к методу put.- Параметры:
-
key- ключ, который нужно поместить в список свойств. -
value- значение, соответствующееkey. - Возвращает:
- предыдущее значение указанного ключа в этом списке свойств или
null, если его не было. - С момента:
- 1.2
- См. также:
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-экранирования для символов и строк следующие:
- Восьмеричные экранирования не распознаются.
- Последовательность символов
\bне представляет символ возврата. - Метод не обрабатывает символ обратного слэша,
\, перед недействительным символом экранирования как ошибку; обратный слэш опускается без звука. Например, в Java-строке последовательность"\z"вызовет ошибку на этапе компиляции. В отличие от этого, этот метод молчаливо отбрасывает обратный слэш. Следовательно, этот метод обрабатывает двухсимвольную последовательность"\b"как эквивалентную одиночному символу'b'. - Экранирование не требуется для одиночных и двойных кавычек; однако, по вышеупомянутому правилу, одиночные и двойные кавычки, предваряемые обратным слэшем, всё равно дают одиночные и двойные кавычки соответственно.
- В последовательности Unicode-экранирования допускается только один символ 'u'.
Указанный поток остаётся открытым после возврата из этого метода.
- Параметры:
-
reader- входной поток символов. - Исключения:
-
IOException- если произошла ошибка при чтении из входного потока. -
IllegalArgumentException- если в вводе появляется неправильная последовательность Unicode-экранирования. -
NullPointerException- еслиreaderравно null. - С момента:
- 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-экранирования. -
NullPointerException- еслиinStreamравно null. - С момента:
- 1.2
save
@Deprecated public void save(OutputStream out, String comments)
store(OutputStream out,
String comments) или метод storeToXML(OutputStream os, String comment).store(OutputStream out, String comments) и подавляет исключения IOException, которые были выброшены.- Параметры:
-
out- поток вывода. -
comments- описание списка свойств. - Исключения:
-
ClassCastException- если этот объектPropertiesсодержит ключи или значения, которые не являютсяStrings.
сохранить
public void store(Writer writer, String comments) throws IOException
Properties таблице в выходной поток символов в формате, подходящем для использования метода load(Reader). Свойства из таблицы по умолчанию этой Properties таблицы (если таковые имеются) не записываются этим методом.
Если аргумент comments не равен 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
сохранить
public void store(OutputStream out, String comments) throws IOException
Properties таблице в выходной поток в формате, подходящем для загрузки в Properties таблицу с использованием метода load(InputStream). Свойства из таблицы по умолчанию этой Properties таблицы (если таковые имеются) не записываются этим методом.
Этот метод выводит комментарии, ключи и значения свойств в том же формате, что и указано в store(Writer), с следующими отличиями:
- Поток записывается с использованием кодировки символов ISO 8859-1.
- Символы, отсутствующие в Latin-1 в комментариях, записываются как
\uxxxx для соответствующего шестнадцатеричного значения 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-документ должен иметь следующую декларацию 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
public void storeToXML(OutputStream os, String comment) throws IOException
Вызов этого метода в форме props.storeToXML(os,
comment) ведет себя точно так же, как вызов props.storeToXML(os, comment, "UTF-8");.
- Параметры:
-
os- выходной поток, в который выводится XML-документ. -
comment- описание списка свойств илиnull, если комментарий не требуется. - Исключения:
-
IOException- если запись в указанный выходной поток приводит кIOException. -
NullPointerException- еслиosравно null. -
ClassCastException- если этот объектPropertiesсодержит какие-либо ключи или значения, которые неStrings. - С тех пор:
- 1.5
- См. также:
storeToXML
public void storeToXML(OutputStream os, String comment, String encoding) throws IOException
XML-документ будет иметь следующую декларацию DOCTYPE:
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
Если указанный комментарий null, то комментарий в документе не будет сохранен.
Реализация должна поддерживать запись XML-документов, использующих кодировки "UTF-8" или "UTF-16". Реализация может поддерживать дополнительные кодировки.
Указанный поток остается открытым после возвращения этого метода.
Этот метод ведет себя так же, как storeToXML(OutputStream os, String comment, Charset charset), за исключением того, что он будет искать кодировку с использованием данного имени кодировки.
- Параметры:
-
os- выходной поток, в который выводится XML-документ. -
comment- описание списка свойств, илиnull, если комментарий не требуется. -
encoding- имя поддерживаемой кодировки символов - Исключения:
-
IOException- если запись в указанный выходной поток приводит кIOException. -
UnsupportedEncodingException- если кодировка не поддерживается реализацией. -
NullPointerException- еслиosравноnull, или еслиencodingравноnull. -
ClassCastException- если этот объектPropertiesсодержит какие-либо ключи или значения, которые неStrings. - С тех пор:
- 1.5
- См. также:
storeToXML
public void storeToXML(OutputStream os, String comment, Charset charset) throws IOException
XML-документ будет иметь следующее объявление DOCTYPE:
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
Если указанный комментарий null то комментарий не будет сохранен в документе.
Реализация должна поддерживать запись XML-документов, использующих кодировку "UTF-8" или "UTF-16". Реализация может поддерживать дополнительные кодировки.
Непреобразуемые символы для указанного набора символов будут закодированы как числовые ссылки на символы.
Указанный поток остается открытым после возврата этого метода.
- Parameters:
-
os- поток вывода, в который должен быть выведен XML-документ. -
comment- описание списка свойств, илиnull, если комментарий нежелателен. -
charset- набор символов - Throws:
-
IOException- если запись в указанный поток вывода приводит кIOException. -
NullPointerException- еслиosилиcharsetявляетсяnull. -
ClassCastException- если этотPropertiesобъект содержит какие-либо ключи или значения, которые не являютсяStrings. - Since:
- 10
- See Also:
getProperty
public String getProperty(String key)
null , если свойство не найдено.- Parameters:
-
key- ключ свойства. - Returns:
- значение в этом списке свойств с указанным значением ключа.
- See Also:
getProperty
public String getProperty(String key, String defaultValue)
- Parameters:
-
key- ключ хэш-таблицы. -
defaultValue- значение по умолчанию. - Returns:
- значение в этом списке свойств с указанным значением ключа.
- See Also:
propertyNames
public Enumeration<?> propertyNames()
- Returns:
- перечисление всех ключей в этом списке свойств, включая ключи в списке свойств по умолчанию.
- Throws:
-
ClassCastException- если любой ключ в этом списке свойств не является строкой. - See Also:
stringPropertyNames
public Set<String> stringPropertyNames()
String , пропускаются. Возвращаемый набор не поддерживает этот Properties объект. Изменения в этом Properties объекте не отражаются в возвращаемом наборе.
- Returns:
- неизменяемый набор ключей в этом списке свойств, где ключ и соответствующее ему значение являются строками, включая ключи в списке свойств по умолчанию.
- Since:
- 1.6
- See Also:
list
public void list(PrintStream out)
- Parameters:
-
out- поток вывода. - Throws:
-
ClassCastException- если любой ключ в этом списке свойств не является строкой.
list
public void list(PrintWriter out)
- Parameters:
-
out- поток вывода. - Throws:
-
ClassCastException- если любой ключ в этом списке свойств не является строкой. - Since:
- 1.1
© 1993, 2021, 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.
https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Properties.html