我们可以查看Properties的源码
可以看到,它是继承HashTable的,也就是说它是线程安全的,且里面的数据以键值对存储
class Properties extends Hashtable<Object,Object>
它里面实现了一个方法load(),而load中调用了load0(),可以加载配置文件
private void load0 (LineReader lr) throws IOException {
char[] convtBuf = new char[1024];
int limit;
int keyLen;
int valueStart;
char c;
boolean hasSep;
boolean precedingBackslash;
while ((limit = lr.readLine()) >= 0) {
c = 0;
keyLen = 0;
valueStart = limit;
hasSep = false;
//System.out.println("line=<" + new String(lineBuf, 0, limit) + ">");
precedingBackslash = false;
while (keyLen < limit) {
c = lr.lineBuf[keyLen];
//need check if escaped.
if ((c == '=' || c == ':') && !precedingBackslash) {
valueStart = keyLen + 1;
hasSep = true;
break;
} else if ((c == ' ' || c == '\t' || c == '\f') && !precedingBackslash) {
valueStart = keyLen + 1;
break;
}
if (c == '\\') {
precedingBackslash = !precedingBackslash;
} else {
precedingBackslash = false;
}
keyLen++;
}
while (valueStart < limit) {
c = lr.lineBuf[valueStart];
if (c != ' ' && c != '\t' && c != '\f') {
if (!hasSep && (c == '=' || c == ':')) {
hasSep = true;
} else {
break;
}
}
valueStart++;
}
String key = loadConvert(lr.lineBuf, 0, keyLen, convtBuf);
String value = loadConvert(lr.lineBuf, valueStart, limit - valueStart, convtBuf);
put(key, value);
}
}
可以看到,load0会将配置文件以:或者=为中间点,获取key和value,存入
存入之后,我们便可以通过getproperties("key")来获取对应的value值
InputStream inputStream=new FileInputStream("C:/Users/86186/Desktop/config.properties");
Properties properties=new Properties();
properties.load(inputStream);
String name=properties.getProperty("name");
System.out.print(name);