今天遇到一个问题就是new FileInputStream(“”)不能获取相对路径的输入流,只能写绝对路径才能访问。
本人通过参考一些文件现总结如下:
1、首先是加载property属性文件
private static Properties properties;
private static Logger log = Logger.getLogger(Configuration.class);
private final static String PropfilePath = "load/proptertyFIle/system.properties";
static{
InputStream in = null;
properties = new Properties();
try {
String path = Thread.currentThread().getContextClassLoader().getResource("").getPath();
//in = new BufferedInputStream (new FileInputStream(path + "/system.properties"));
in = Configuration.class.getClassLoader().getResourceAsStream(PropfilePath);
properties.load(in);
} catch (FileNotFoundException ex) {
log.error("Cannot find file [system.properties].");
ex.printStackTrace();
} catch (IOException ex) {
log.error("Read file[system.properties] Error.");
ex.printStackTrace();
} finally {
try {
if (in != null)
in.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
2、有key获取value
public static String getValue(String key) {
if (properties.containsKey(key)) {
// 得到某一属性的值
String value = properties.getProperty(key);
return value;
} else
return "";
}
3、读取properties
public static void readProperties(String filePath) {
Properties props = new Properties();
try {
InputStream in = new BufferedInputStream((new FileInputStream(filePath)));
props.load(in);
Enumeration en = props.propertyNames();
while (en.hasMoreElements()) {
String key = (String) en.nextElement();
String Property = props.getProperty (key);
System.out.println(key+Property);
}
} catch (Exception e) {
e.printStackTrace();
}
}
4、 //写入propertity信息
public static void writeProperties(String filePath,String parameterName,String parameterValue) {
Properties prop = new Properties();
try {
InputStream fis = new FileInputStream(filePath);
//从输入流中读取属性列表(键和元素对)
prop.load(fis);
//调用 Hashtable 的方法 put。使用 getProperty 方法提供并行性。
//强制要求为属性的键和值使用字符串。返回值是 Hashtable 调用 put 的结果。
OutputStream fos = new FileOutputStream(filePath);
prop.setProperty(parameterName, parameterValue);
//以适合使用 load 方法加载到 Properties 表中的格式,
//将此 Properties 表中的属性列表(键和元素对)写入输出流
prop.store(fos, "Update '" + parameterName + "' value");
} catch (IOException e) {
System.err.println("Visit "+filePath+" for updating "+parameterName+" value error");
}
}
5、测试
public static void main(String[] args) throws IOException {
System.out.println(Configuration.getValue("saveDays"));
System.out.println(new File("system.properties").getPath());
//注意需要绝对路径 提供字符串做参数的话,new FileInputStream需要写绝对路径。
Configuration.readProperties("D:\\myeclipseWorkplace\\test\\src\\load\\proptertyFIle\\system.properties");
System.out.println(System.getProperty("user.dir"));
Configuration.writeProperties("D:\\myeclipseWorkplace\\test\\src\\load\\proptertyFIle\\system.properties", "insert", "this is a test data");
}