Java 属性类
属性类代表一个持久的属性集。属性可以被保存到一个流中或从一个流中加载。它属于 java.util 包。 Properties 定义了以下实例变量。这个变量持有一个与 Properties 对象相关的默认属性列表。
Properties defaults: 这个变量持有一个与Properties对象相关的默认属性列表。
Properties类的特点
- Properties 是Hashtable的一个子类。
- 它被用来维护一个值列表,其中的键是一个字符串,值也是一个字符串,即;它可以用来存储和检索属性文件中的字符串类型数据。
- 属性类可以指定其他属性列表,因为它是默认的。如果一个特定的关键属性不存在于原始的属性列表中,默认的属性将被搜索到。
- 属性对象不需要外部同步,多个线程可以共享一个属性对象。
- 此外,它还可以用来检索系统的属性。
属性文件 的优点
如果任何数据从属性记录中被改变,你不必重新编译java类。它被利用来存储要习惯性改变的数据。
注意: 属性类并没有从它的超类 Hashtable 继承负载因子的概念 。
声明
public class Properties extends Hashtable<Object,Object>
属性的构造器
1.Properties(): 这将创建一个没有默认值的 Properties 对象。
Properties p = new Properties()
2.Properties(Properties propDefault): 第二个方法是创建一个使用 propDefault 作为默认值的对象。
Properties p = new Properties(Properties propDefault)
例1: 下面的程序展示了如何使用Properties类从属性文件中获取信息。
让我们创建一个属性文件并将其命名为 db.properties
db.proper ties
username = coder
password = geeksforgeeks
编码
// Java program to demonstrate Properties class to get
// information from the properties file
import java.util.*;
import java.io.*;
public class GFG {
public static void main(String[] args) throws Exception
{
// create a reader object on the properties file
FileReader reader = new FileReader("db.properties");
// create properties object
Properties p = new Properties();
// Add a wrapper around reader object
p.load(reader);
// access properties data
System.out.println(p.getProperty("username"));
System.out.println(p.getProperty("password"));
}
}
输出

例2: 下面的程序展示了如何使用Properties类来获取所有的系统属性。使用System.getProperties()方法,我们可以得到系统的所有属性。
// Java program to demonstrate Properties class to get all
// the system properties
import java.util.*;
import java.io.*;
public class GFG {
public static void main(String[] args) throws Exception
{
// get all the system properties
Properties p = System.getProperties();
// stores set of properties information
Set set = p.entrySet();
// iterate over the set
Iterator itr = set.iterator();
while (itr.hasNext()) {
// print each property
Map.Entry entry = (Map.Entry)itr.next();
System.out.println(entry.getKey() + " = "
+ entry.getValue());
}
}
}
输出

例3: 下面的程序展示了如何使用属性类来创建一个属性文件。
// Java program to demonstrate Properties class to create
// the properties file
import java.util.*;
import java.io.*;
public class GFG {
public static void main(String[] args) throws Exception
{
// create an instance of Properties
Properties p = new Properties();
// add properties to it
p.setProperty("name", "Ganesh Chowdhary Sadanala");
p.setProperty("email",
"ganeshs.gfg@gmail.com");
// store the properties to a file
p.store(new FileWriter("info.properties"),
"GeeksforGeeks Properties Example");
}
}
输出

属性的方法
| 方法 | 描述 |
|---|---|
| getProperty(String key) | 在这个属性列表中搜索具有指定键的属性。 |
| getProperty(String key, String defaultValue) | 在这个属性列表中搜索带有指定键的属性。 |
| list(PrintStream out) | 将此属性列表打印到指定的输出流。 |
| list(PrintWriter out) | 将此属性列表打印到指定的输出流中。 |
| load(InputStream inStream) | 从输入字节流中读取一个属性列表(键和元素对)。 |
| load(Reader reader) | 以简单的面向行的格式从输入的字符流中读取一个属性列表(键和元素对)。 |
| loadFromXML(InputStream in) | 将指定输入流上的XML文档所代表的所有属性加载到这个属性表中。 |
| propertyNames() | 返回这个属性列表中所有键的枚举值,包括默认属性列表中的不同键,如果还没有从主属性列表中找到同名的键的话。 |
| save(OutputStream out, String comments) | 弃用。 如果在保存属性列表时发生I/O错误,该方法不会抛出一个IOException。 |
| setProperty(String key, String value) | 调用Hashtable方法put。 |
| store(OutputStream out, String comments) | 将此属性表中的此属性列表(键和元素对)以适合使用load(InputStream)方法加载到属性表的格式写入输出流中。 |
| store(Writer writer, String comments) | 将此属性表中的此属性列表(键和元素对)以适合使用load(Reader)方法的格式写到输出字符流中。 |
| storeToXML(OutputStream os, String comment) | 发出一个代表此表中所有属性的XML文档。 |
| storeToXML(OutputStream os, String comment, String encoding) | 发出一个XML文档,代表此表中包含的所有属性,使用指定的编码。 |
| storeToXML(OutputStream os, String comment, Charset charset) | 发出一个XML文档,代表此表中包含的所有属性,使用指定的编码。 |
| stringPropertyNames() | 从这个属性列表中返回一组不可修改的键,其中的键和它的对应值都是字符串,包括默认属性列表中的不同键,如果在主属性列表中还没有找到同名的键的话。 |
java.util.Hashtable类中声明的方法
| 方法 | 描述 |
|---|---|
| clear() | 清除这个hashtable,使其不包含任何键。 |
| clone() | 创建这个hashtable的一个浅层拷贝。 |
| compute(K key, BiFunction<? super K,? super V,? extends V> remappingFunction) | 试图为指定的键和其当前的映射值计算一个映射(如果没有当前的映射,则为空)。 |
| computeIfAbsent(K key, Function<? super K,? extends V> mappingFunction) | 如果指定的键还没有与一个值相关联(或者被映射为空),则尝试使用给定的映射函数计算其值,并将其输入此映射,除非为空。 |
| computeIfPresent(K key, BiFunction<? super K,? super V,? extends V> remappingFunction) | 如果指定的键的值是存在的,并且不是空的,则尝试给定键和其当前的映射值来计算一个新的映射。 |
| contains(Object value) | 测试某个键是否映射到这个hashtable中的指定值。 |
| containsKey(Object key) | 测试指定的对象是否是这个hashtable中的一个键。 |
| containsValue(Object value) | 如果这个hashtable将一个或多个键映射到这个值,返回true。 |
| elements() | 返回这个hashtable中的值的枚举。 |
| entrySet() | 返回这个Map中包含的映射的Set视图。 |
| equals(Object o) | 根据Map接口中的定义,将指定的Object与此Map进行比较,看是否相等。 |
| get(Object key) | 返回指定的键被映射到的值,如果此Map不包含键的映射,则返回空值。 |
| hashCode() | 按照Map接口的定义,返回该Map的哈希代码值。 |
| isEmpty() | 测试这个hashtable是否没有将键映射到值。 |
| keys() | 返回这个hashtable中的键的枚举值。 |
| keySet() | 返回这个Map中包含的键的Set视图。 |
| merge(K key, V value, BiFunction<? super V,? super V,? extends V> remappingFunction) | 如果指定的键还没有与一个值相关联或者与空值相关联,则将其与给定的非空值相关联。 |
| put(K key, V value) | 将指定的键映射到这个hashtable中的指定值。 |
| putAll(Map<? extends K,? extends V> t) | 将指定Map中的所有映射复制到这个hashtable中。 |
| rehash() | 增加这个hashtable的容量并在内部进行重组,以便更有效地容纳和访问其条目。 |
| remove(Object key) | 从这个hashtable中删除键(和它的相应值)。 |
| size() | 返回这个hashtable中的键的数量。 |
| toString() | 返回这个Hashtable对象的字符串表示,其形式是一组条目,用大括号括起来,用ASCII字符”,”(逗号和空格)分开。 |
| value() | 返回该Map中包含的值的集合视图。 |
java.util.Map接口中声明的方法
| 方法 | 描述 |
|---|---|
| forEach(BiConsumer<? super K,? super V> action) | 对该Map中的每个条目执行给定的操作,直到所有条目都被处理完,或者该操作抛出一个异常。 |
| getOrDefault(Object key, V defaultValue) | 返回指定的键被映射到的值,如果这个Map不包含键的映射,则返回defaultValue。 |
| putIfAbsent(K key, V value) | 如果指定的键还没有与一个值相关联(或者被映射为null),则将其与给定的值相关联并返回null,否则返回当前值。 |
| remove(Object key, Object value) | 只有当指定的键当前被映射到指定的值时,才会删除该键的条目。 |
| replace(K key, V value) | 只有当指定的键当前被映射到某个值时,才会替换该键的条目。 |
| replace(K key, V oldValue, V newValue) | 只在当前映射到指定值的情况下替换指定键的条目。 |
| replaceAll(BiFunction<? super K,? super V,? extends V> function) | 用在该条目上调用给定函数的结果替换每个条目的值,直到所有条目都被处理或该函数抛出一个异常。 |
极客教程