Свойства класса
- Все реализуемые интерфейсы:
-
Serializable,Cloneable,Map<Object,Object>
- Прямые известные подклассы:
Provider
public class Properties extends Hashtable<Object,Object>
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- размер, для которого список свойств будет рассчитан, чтобы вместить это количество элементов - Исключения:
-
IllegalArgumentException- если начальная ёмкость меньше нуля. - С версии:
- 10
Свойства
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). Различия от последовательностей экранирования символов и Юникод-экранирования, используемых для символов и строк, следующие:
- Восьмеричные экранирования не распознаются.
- Последовательность символов
\bне представляет собой символ возврата. - Метод не рассматривает символ обратного слэша,
\, перед недействительным символом экранирования как ошибку; обратный слэш молча отбрасывается. Например, в строке Java последовательность"\z"вызовет ошибку компиляции. В отличие от этого, этот метод молча отбрасывает обратный слэш. Следовательно, этот метод обрабатывает двухсимвольную последовательность"\b"как эквивалентную одиночному символу'b'. - Экранирования не нужны для одиночных и двойных кавычек; однако, по приведенному выше правилу, одиночные и двойные кавычки, предшествующие обратному слэшу, по-прежнему генерируют одиночные и двойные кавычки соответственно.
- В последовательности Юникод-экранирования допускается только один символ 'u'.
Указанный поток остаётся открытым после возвращения этого метода.
- Параметры:
-
reader- входной поток символов. - Исключения:
-
IOException- если произошла ошибка при чтении из входного потока. -
IllegalArgumentException- если в вводе присутствует некорректное Юникод-экранирование. -
NullPointerException- еслиreaderравно null. - С версии:
- 1.6
load
public void load(InputStream inStream) throws IOException
load(Reader), и предполагается, что он использует кодировку символов ISO 8859-1; то есть каждый байт представляет один символ Latin1. Символы, не относящиеся к Latin1, и определённые специальные символы, представлены в ключах и элементах с помощью Юникод-экранирования, как определено в разделе 3.3 спецификации языка Java. Указанный поток остаётся открытым после возвращения этого метода.
- Параметры:
-
inStream- входной поток. - Исключения:
-
IOException- если произошла ошибка при чтении из входного потока. -
IllegalArgumentException- если входной поток содержит некорректную последовательность Юникод-экранирования. -
NullPointerException- еслиinStreamравно null. - С версии:
- 1.2
сохранить
@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), строка комментария записывается следующим образом. Сначала записывается символ #, затем содержимое свойства, затем разделитель строк. Любые символы завершения строки в значении системного свойства обрабатываются так же, как указано выше для аргумента комментариев. Если системное свойство не задано или пустое, строка комментария записывается следующим образом. Сначала записывается символ #, затем текущая дата и время, отформатированные так же, как методом 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 для соответствующего шестнадцатеричного значения 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), за исключением того, что он будет искать кодировку по заданному имени кодировки.
- Parameters:
-
os- поток вывода, на который необходимо вывести XML-документ. -
comment- описание списка свойств илиnull, если комментарий не требуется. -
encoding- имя поддерживаемой кодировки символов - Throws:
-
IOException- если запись в указанный поток вывода приводит кIOException. -
UnsupportedEncodingException- если кодировка не поддерживается реализацией. -
NullPointerException- еслиosравноnull, или еслиencodingравноnull. -
ClassCastException- если этот объектPropertiesсодержит какие-либо ключи или значения, которые не являютсяStrings. - Since:
- 1.5
- External Specifications
- See Also:
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
- External Specifications
- 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, 2025, 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://download.java.net/java/early_access/jdk24/docs/api/java.base/java/util/Properties.html