properties文件是键值对组成的,那如何对这类文件进行读取
首先给出需要解析的properties文件:(键值对也可以用”:“,”空格“表示)
现在给出一个test类,对上面的properties文件进行解析
在这里我们希望可以做出一个解析properties文件的工具(propertiesParser):
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
public class Test
{
public static void main(String[] args)
{
String name=propertiesParser("/a.properties", "name");
System.out.println(name);
}
public static String propertiesParser(String filePath, String key)
{
Properties property=new Properties();
InputStream inStream=Test.class.getResourceAsStream(filePath);
try
{
property.load(inStream);
String value=(String) property.get(key);
inStream.close();
return value;
}
catch(IOException e)
{
e.printStackTrace();
}
return null;
}
}
可以看到输出结果没毛病
用这种方式取出里面所有的键对应的值,需要把文件不停的打开关闭,对于外存操作速度不可能快的起来,这取决于硬盘的速度。
由于properties文件里都是键值对,可以一次性把所有键值对读到map里面去,相当于一次性读入内存。以后可以用get从map里面读。
import java.io.IOException;
import java.io.InputStream;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
public class propertiesParser
{
private static final Map<String, String> pool;
static// 只在该类被第一次加载的时候执行,以后再也不执行,害怕每一次构造会给同一个pool赋值,防止数据丢失
{
pool=new HashMap<>();// 所有的properties的对象只有一个pool,单例的
}
public propertiesParser()
{
}
public static void loadProperties(String filePath)
{
InputStream inStream=propertiesParser.class.getResourceAsStream(filePath);
Properties properties=new Properties();
try
{
properties.load(inStream);
Enumeration<Object> keys=properties.keys();// 取出所有的键,keys是枚举类型
/**
* 遍历keys
*/
while(keys.hasMoreElements())
{
String key=(String) keys.nextElement();
String value=properties.getProperty(key);
pool.put(key, value);
}
}
catch(IOException e)
{
e.printStackTrace();
}
}
public static String value(String key)
{
return pool.get(key);
}
}
执行一下