Свойства класса
- Все реализуемые интерфейсы:
-
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.
Итераторы, возвращаемые методом iterator в "коллекциях представлений" этого класса (то есть, entrySet(), keySet(), и values()) не являются быстродействующими (в отличие от реализации 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 |
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- размер, к которому будет адаптированProperties. - Исключения:
-
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) или возврата каретки, непосредственно за которым следует новая строка (\r\n) в комментариях заменяется на line separator, и если следующий символ в комментариях не является символом # или символом !, то после этого разделителя строк записывается ASCII-символ #.
Если java.properties.date установлено в командной строке и не пусто (определяется с помощью String.isEmpty), строка комментариев записывается следующим образом. Сначала записывается символ #, затем содержимое свойства, а затем разделитель строк. Любые символы завершения строки в значении системной переменной обрабатываются аналогичным образом, как указано выше для аргумента comments. Если системная переменная не задана или пуста, строка комментариев записывается следующим образом. Сначала записывается символ #, затем текущая дата и время, отформатированные так же, как и методом Date.toString, а затем разделитель строк.
Затем каждый элемент в этой Properties таблице записывается по одной строке. Для каждого элемента записывается строка ключа, затем ASCII-символ =, а затем соответствующая строка элемента. Для ключа все символы пробела записываются с предшествующим символом \. Для элемента ведущие символы пробела, но не вложенные или заключительные символы пробела, записываются с предшествующим символом \. Символы ключа и элемента #, !, =, и : записываются с предшествующим обратным слэшем, чтобы обеспечить их правильную загрузку.
После записи элементов выходной поток сбрасывается. Выходной поток остается открытым после возвращения из этого метода.
- Требования к реализации:
- Ключи и элементы записываются в естественном порядке сортировки ключей в
entrySet(), еслиentrySet()не переопределяется подклассом для возврата значения, отличного отsuper.entrySet(). - Параметры:
-
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 для соответствующего шестнадцатеричного значения 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-документ должен иметь следующее объявление 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
- Внешние спецификации
- См. также:
getProperty
public String getProperty(String key)
null если свойство не найдено.- Parameters:
-
key- ключ свойства. - Returns:
- значение свойства в этом списке свойств с указанным ключом.
- См. также:
getProperty
public String getProperty(String key, String defaultValue)
- Parameters:
-
key- ключ хэш-таблицы. -
defaultValue- значение по умолчанию. - Returns:
- значение свойства в этом списке свойств с указанным ключом.
- См. также:
propertyNames
public Enumeration<?> propertyNames()
- Returns:
- перечисление всех ключей в этом списке свойств, включая ключи в списке свойств по умолчанию.
- Throws:
-
ClassCastException- если какой-либо ключ в этом списке свойств не является строкой. - См. также:
stringPropertyNames
public Set<String> stringPropertyNames()
String , пропускаются. Возвращаемый набор не поддерживается этим объектом Properties . Изменения в этом объекте Properties не отражаются в возвращаемом наборе.
- Returns:
- неизменяемый набор ключей в этом списке свойств, где ключ и соответствующее значение являются строками, включая ключи в списке свойств по умолчанию.
- Since:
- 1.6
- См. также:
list
public void list(PrintStream out)
- Parameters:
-
out- поток вывода. - Throws:
-
ClassCastException- если какой-либо ключ в этом списке свойств не является строкой.
list
public void list(PrintWriter out)
- Parameters:
-
out- поток вывода. - Throws:
-
ClassCastException- если какой-либо ключ в этом списке свойств не является строкой. - Since:
- 1.1
© 1993, 2023, 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/21/docs/api/java.base/java/util/Properties.html