首页 > 学院 > 开发设计 > 正文

Properties类

2019-11-08 02:36:54
字体:
来源:转载
供稿:网友

PRoperties类

Properties 类表示了一个持久的属性集。Properties 可保存在流中或从流中加载。属性列表中每个键及其对应值都是一个字符串。Properties 类在java中是个比较重要的类,主要用于读取Java的配置文件,各种语言都有自己所支持的配置文件,配置文件中很多变量是经常改变的,这样做也是为了方便用户,让用户能够脱离程序本身去修改相关的变量设置。

在线API文档

http://www.apihome.cn/api/java/Properties.html


构造方法

Properties() //创建一个无默认值的空属性列表。Properties(Properties defaults) //创建一个带有指定默认值的空属性列表。

常用方法

String getProperty(String key) //用指定的键在此属性列表中搜索属性。StringgetProperty(String key, String defaultValue) //用指定的键在属性列表中搜索属性。Object setProperty(String key, String value) //调用 Hashtable 的方法 put。void load(InputStream inStream) //从输入流中读取属性列表(键和元素对)。void loadFromxml(InputStream in) //将指定输入流中由 XML 文档所表示的所有属性加载到此属性表中。void store(OutputStream out, String comments) //以适合使用 load(InputStream) 方法加载到 Properties 表中的格式,将此 Properties 表中的属性列表(键和元素对)写入输出流。void storeToXML(OutputStream os, String comment, String encoding) //使用指定的编码发出一个表示此表中包含的所有属性的 XML 文档。

创建properties文件

/** * 使用Properties类把我们的属性保存一个properties文件 */ public static void test1(){ Properties p = new Properties(); p.setProperty("姓名", "LingDu"); p.setProperty("性别", "男"); p.setProperty("年龄", "18"); try { p.store(new FileOutputStream("a.properties"), "this is frist properties file"); } catch (IOException e) { e.printStackTrace(); } }

在保存properties文件的时候默认使用 ISO 8859-1 字符编码写入该流

1


可以在保存文件的时候设置一下编码

p.store(new OutputStreamWriter(new FileOutputStream("b.properties"),"UTF-8"), "this is utf-8 encoding the properties file");

2


读取properties文件

/** * 使用Properties类读取properties文件 */ public static void test2(){ Properties p = new Properties(); try { //读取properties文件,拿到键值对 p.load(new InputStreamReader(new FileInputStream("a.properties"))); Set<Entry<Object,Object>> set = p.entrySet(); for (Iterator<Entry<Object, Object>> iterator = set.iterator(); iterator.hasNext();) { Entry<Object, Object> entry = (Entry<Object, Object>) iterator.next(); System.out.println(entry.getKey() + "=" + entry.getValue()); } } catch (IOException e) { e.printStackTrace(); } }

9


创建XML文件

/** * 使用Properties类把我们的属性保存一个XML文件 */ public static void test3(){ Properties p = new Properties(); p.setProperty("姓名", "LingDu"); p.setProperty("性别", "男"); p.setProperty("年龄", "18"); try { p.storeToXML(new FileOutputStream("a.xml"), "this is frist xml file"); } catch (IOException e) { e.printStackTrace(); } }

3


读取XML文件

/** * 从XML文件中读取数据 */ public static void test4(){ Properties p = new Properties(); try { p.loadFromXML(new FileInputStream("a.xml")); //将读取的姓名输出 System.out.println(p.getProperty("姓名")); } catch (IOException e) { e.printStackTrace(); } }

4


提高代码的可复用性

通常我们要提高代码的可复用性,一般会对方法进行封装 这样可以更方便的获取到对应的属性值 我这里分别创建一个jdbc.properties文件,和sql.xml文件


jdbc.properties文件用来存放连接数据库的一些相关属性

5


sql.xml文件存放一些查询数据库有关的语句

6


可复用的PropertiesUtil工具类

import java.io.FileInputStream;import java.io.IOException;import java.io.InputStreamReader;import java.util.Properties;/** * 读取属性文件相关的类 * 将方法进行封装 * @author LingDu */public class PropertiesUtil { /** * 功能:从配置文件中读取出一个key对应的value * @param propertyName 配置文件中的key * @return 返回一个value */ public static String getValue(String propertyName){ String value = ""; Properties p = new Properties(); try { p.load(new InputStreamReader(new FileInputStream("src/jdbc.properties"),"UTF-8")); } catch (IOException e) { e.printStackTrace(); } //使用带默认值的方法,如果没找到对应的key,则赋值一个空字符串 value = p.getProperty(propertyName,""); return value; } /** * 功能:从XML文件中读取对应的value值 * @param propertyName 配置文件中的key * @return 返回一个value */ public static String getValueFromXml(String propertyName){ String value = ""; Properties p = new Properties(); try { p.loadFromXML(new FileInputStream("src/sql.xml")); } catch (IOException e) { e.printStackTrace(); } value = p.getProperty(propertyName,""); return value; } public static void main(String[] args){ //输出key为"driverName" 的value值 System.out.println(PropertiesUtil.getValue("driverName")); //输出key为"user.list" 的value值 , 后面的方法作用是 替换掉/r/n System.out.println(PropertiesUtil.getValueFromXml("user.list").replace("/r", "").replace("/n", "")); }}

7

可复用的sql工具类

import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;import java.util.ArrayList;import java.util.List;/** * 2017-2-18 * 从配置文件中动态加载SQL语句 * @author LingDu */public class JdbcDemo { /** * 获取一个数据库的连接 * 通过去PropertiesUtil工具类去读取src下的jdbc.properties文件 * @return 返回一个连接 */ public static Connection getConnection(){ String driverName = PropertiesUtil.getValue("driverName"); String url = PropertiesUtil.getValue("url"); String username = PropertiesUtil.getValue("username"); String passWord = PropertiesUtil.getValue("password"); Connection conn = null; try { Class.forName(driverName); conn = DriverManager.getConnection(url,username,password); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } return conn; } /** * 功能:从数据库获取一个用户数据的集合 * @return 对象集合 */ public static List<User> getUserList(){ List<User> userList = new ArrayList<User>(); Connection conn = getConnection(); String sql = PropertiesUtil.getValueFromXml("user.list"); System.out.println("读取到xml中的sql语句:" + sql + "/n"); Statement stmt = null; ResultSet rs = null; try { stmt = conn.createStatement(); rs = stmt.executeQuery(sql); while(rs.next()){ int id = rs.getInt("id"); String name = rs.getString("username"); User user = new User(id,name); userList.add(user); } } catch (SQLException e) { e.printStackTrace(); }finally{ try { rs.close(); stmt.close(); conn.close(); } catch (SQLException e) { e.printStackTrace(); } } return userList; } /** * 带条件的SQL查询 * 功能:从数据库获取一个指定名字的数据集合 * @return 对象集合 */ public static List<User> getUserListByName(String name){ List<User> userList = new ArrayList<User>(); Connection conn = getConnection(); String sql = PropertiesUtil.getValueFromXml("user.list.byName"); System.out.println("读取到xml中的sql语句:" + sql + "/n"); //创建一个预编译的PreparedStatement对象 PreparedStatement ps = null; ResultSet rs = null; try { //prepareStatement(String sql) 创建一个 PreparedStatement 对象来将参数化的 SQL 语句发送到数据库。 ps = conn.prepareStatement(sql); //select * from tb_user where username=? 设置到第一个参数 '?' ps.setString(1, name); //执行查询语句 rs = ps.executeQuery(); while(rs.next()){ User user = new User(rs.getInt("id"),rs.getString("username")); userList.add(user); } } catch (SQLException e) { e.printStackTrace(); }finally{ try { rs.close(); ps.close(); conn.close(); } catch (SQLException e) { e.printStackTrace(); } } return userList; } public static void main(String[] args){ Connection conn = getConnection(); if(conn != null){ System.out.println("数据库已连接"); } System.out.println("-----------------------------/n"); //获取到所有的用户数据 List<User> userList = getUserList(); for (User user : userList) { System.out.println("id=" + user.getId() + ",username=" + user.getUserName()); } System.out.println("-----------------------------/n"); //传入用户名获取指定用户名的数据 List<User> userListByName = getUserListByName("lingdu"); for (User user : userListByName) { System.out.println("id=" + user.getId() + ",username=" + user.getUserName()); } }}/** * JavaBean * 存放User表中相关字段 * @author LingDu */class User{ private int id; private String userName; public User(int id, String userName) { super(); this.id = id; this.userName = userName; } public User(){} public int getId() { return id; } public void setId(int id) { this.id = id; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; }}

8


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表