标签:java properties
java中的properties文件是一种配置文件,主要用于表达配置信息,文件类型为*.properties,格式为文本文件,文件的内容是格式是"键=值"的格式,在properties文件中,可以用"#"来作注释,properties文件在Java编程中用到的地方很多,操作很方便。
例如:
test.properties ------------------------------------------------------ ################################# # 工商报表应用IcisReport的配置文件# # 日期:2015年08月01日 # ################################# # # 说明:测试 # #IcisReport的ip IcisReport.server.ip=192.168.3.143 #IcisReport的端口 IcisReport.server.port=8080 #IcisReport的上下文路径 IcisReport.contextPath=/IcisReport
properties文件的路径:java的properties文件需要放到classpath下面,这样程序才能读取到,有关classpath实际上就是java类或者库的存放路径,在java工程中,properties放到class文件一块。在web应用中,最简单的方法是放到web应用的WEB- INF\classes目录下即可,也可以放在其他文件夹下面,这时候需要在设置classpath环境变量的时候,将这个文件夹路径加到 classpath变量中,这样也也可以读取到。
读取:
一、properties文件的绝对路径:
String path = "C:\\db.properties"; FileInputStream in = new FileInputStream(path); Properties prop = new Properties(); prop.load(in); prop.getProperty("<span style="color: rgb(75, 75, 75); line-height: 18px; font-family: 'Microsoft YaHei', Verdana, sans-serif, SimSun; background-color: rgb(255, 255, 255);">IcisReport.server.ip</span>");二、web工程中,文件在工程中的位置$app/WEB-INF/classes/db.properties
在web有两种情形,一种是Servlet、一种是非Servlet
在Servlet中有2种方式:
1、
InputStream in = this.getServletContext().getResourceAsStream("/WEB-INF/classes/db.properties"); Properties prop = new Properties(); prop.load(in); prop.getProperty("username");2、
String path = this.getServletContext().getRealPath("/WEB-INF/classes/db.properties"); FileInputStream in = new FileInputStream(path); Properties prop = new Properties(); prop.load(in); prop.getProperty("username");在非Servlet时,假设类名为Demo,要使用类装载器来读取,也有2种方式:
InputStream in = Demo.class.getClassLoader().getResourceAsStream("db.properties"); Properties prop = new Properties(); prop.load(in); prop.getProperty("username");
这种方法的
弊端
:类装载器加载内容时,会先查找内存中是否已经存在相应的内容:
如果有就不再加载直接使用内存中的,所以此方法,第一次加载后,如果文件内容有变动,第二次加载后还是原来的内容,无法加载修改后的内容
下边的第二种方法取文件的绝对路径来加载不会有这种问题
2.得到文件的绝对路径再进行操作
String path = Demo.class.getClassLoader().getResource("db.properties").getPath(); FileInputStream in = new FileInputStream(path); Properties prop = new Properties(); prop.load(in); prop.getProperty("username");
//根据key读取value public static String readValue(String filePath,String key) { Properties props = new Properties(); try { InputStream in = new BufferedInputStream (new FileInputStream(filePath)); props.load(in); String value = props.getProperty (key); System.out.println(key+value); return value; } catch (Exception e) { e.printStackTrace(); return null; } } //读取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(); } } //写入properties信息 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"); } } public static void main(String[] args) { readValue("info.properties","url"); writeProperties("info.properties","age","21"); readProperties("info.properties" ); System.out.println("OK"); }
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:java properties
原文地址:http://blog.csdn.net/zhao50632/article/details/47217153