我刚刚读到可以使用Properties
类存储键/值对(属性),HashTable
类是System.setProperty
的子类。但是,我还读过您可以使用foreach (@filelist) {
chomp;
my $File = $_;
if ( $File =~ qr/.+/o ) {
if ( $BaseLine ) {
$BaseLineRegExpA = qr/^\Q$BaseLine\E\\/io; #these 2 regexes
$BaseLineRegExpB = qr/^\Q$BaseLine\E;/io; #these 2 regexes
if ( $File =~ /$BaseLineRegExpA/ ) {
#...
} elsif ( (!($File =~ /$BaseLineRegExpB/)) && (!(lc( $File ) eq lc( $BaseLine ) )) ) {
$BaseLine = $File;
}
}
}
}
直接存储属性。
那么我使用哪一个?每个人的真实用例是什么?
非常感谢。
答案 0 :(得分:1)
property
是Java.lang.System
类型的静态成员变量,它是java.util.Properties
类型。因此,System.setProperty(key)
只是property
setter方法。 Hashtable
是一种存储数据的方式,您也可以将其视为数据库。
您应该使用System.setProperty(key)
和System.getProperty(key)
来撰写和阅读密钥/值。
import java.io.FileInputStream;
import java.util.Properties;
public class PropertiesTest {
public static void main(String[] args)
throws Exception {
// set up new properties object
// from file "myProperties.txt"
FileInputStream propFile =
new FileInputStream( "myProperties.txt");
Properties p =
new Properties(System.getProperties());
p.load(propFile);
// set the system properties
System.setProperties(p);
// display new properties
System.getProperties().list(System.out);
}
}
答案 1 :(得分:0)
据我所知System.setProperty()
使用java.util.Properties
类,因此他们使用相同的支持类。但是,System.setProperties()
使用的属性类是从VM检索的,请查看documentation for System.getProperties()以获取有关属性集的更多信息。
您可能需要考虑通过设置系统属性来实现的目标,因为它们通常是描述系统版本和路径的运行时变量。
在我看到的所有应用程序中,System.properties都被用作只读列表,如果您想将属性写入某个地方以供系统使用,最好将它放在数据库表中(如果您打算在运行时更改这些选项)并像这样使用它。您可能想尝试使用属性文件,如果它是一个相对静态的程序选项列表,您需要能够在应用程序的不同实例上有所不同,所以可能会出现类似品牌的内容。
Properties
类的主要目的是能够将列表键值列表序列化为流,请参阅Properties类
答案 2 :(得分:0)
如果您不想修改多个属性,则使用System.setProperty(key, value)
比使用System.setProperties(props)
或System.getProperties().setProperty(key, value)
等替代方案更好。区别在于SecurityManager
处理这些调用的方式。对于System.setProperty(key, value)
,系统会要求SecurityManager
修改单个特定key
。对于System.getProperties()
来说,系统会要求SecurityManager
允许读取/写入任何内容。因此,已安装的SecurityManager
可能仅保护部分属性,因此setProperty(key, value)
将成功,但getProperties().setProperty(key, value)
将失败。
如果您需要阅读特定属性,请始终使用System.getProperty(key)
代替System.getProperties().getProperty(key)
。如果安装SecurityManager
禁用属性写入,但启用属性读取,则第二次调用将失败。