Properties工具类获取配置文件数据

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_36146275/article/details/55549832

Properties类的作用是获取配置文件以键值对存储的数据,里面保存了驱动类、url、用户名、密码和sql语句的等数据。而properties文件则是用于存放一些系统的配置信息,如:webservice地址、公共变量、数据库连接信息等,便于系统的升级维护。


一、Properties类简单应用

创建项目PropertiesDemo,新建PropertiesDemo类、PropertiesUtil类、以及userInfo.properties配置文件,项目结构如下:


*****************************************************************************************************************************************************

编辑userInfo.properties配置文件:“=”左边是键,右边是值,properties文件是以键值对的形式存储的

userName=Tom
age=20
gender=男

编写PropertiesUtil.java :里面只封装一个方法来返回数据结果

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.Properties;

public class PropertiesUtil {
	/**
	 * 功能:从userInfo.properties文件中读取出一个key对应的value
	 * @param 接收一个key值
	 * @return 返回value值
	 */
	public static String getValue(String keyName){
		String value = "";
		Properties p = new Properties();
		try {
			//读取jdbc.properties文件,使用InputStreamReader字符流防止文件中出现中文导致乱码
			p.load(new InputStreamReader(new FileInputStream("src/userInfo.properties"),"UTF-8"));
			value = p.getProperty(keyName,"获取失败");
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		return value;
	}
}

编写PropertiesDemo:

public class PropertiesDemo {
	public static void main(String[] args) {
		
		PropertiesUtil p = new PropertiesUtil();
		
		String userName = p.getValue("userName");
		String age = p.getValue("age");
		String gender = p.getValue("gender");
		
		System.out.println("userName="+userName);
		System.out.println("age="+age);
		System.out.println("gender="+gender);

	}
	
}

运行结果:main方法通过"键"3次调用getValue()方法,成功获取到了配置文件中的"值"。

需要注意的是,方法接收的keyName必须和配置文件的"键名"保持一致,否则数据获取不到。


二、Properties类获取XML文件信息(进阶)

创建项目JDBCConnection,新建JDBCConn类、以及jdbc.properties配置文件,项目结构如下:


使用Maven技术导入数据库驱动包:

右击项目--->Configure--->Convert to Maven Project


*****************************************************************************************************************************************************

转换成Maven项目后,项目多了一个文件,编辑pom.xml:


*****************************************************************************************************************************************************

在文末添加以下内容:

<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.38</version>
</dependency>

*****************************************************************************************************************************************************

此时驱动包已经下载好了:


*****************************************************************************************************************************************************

编辑jdbc.properties配置文件:

#Properties配置文件,保存通用的数据库用户名、密码等
driverName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mashen?useSSL=false
userName=root
passWord=123

编写PropertiesUtil.java :里面只封装一个方法来返回数据结果:

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Properties;

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();
		}
		value = p.getProperty(propertyName,"");
		return value;
	}
}


编辑JDBCConn类:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class JDBCConn {
	
	/**
	 * 打开数据库连接
	 * @param args
	 */
	public static Connection getConnection(){
		Connection conn = null;
		String driverName = PropertiesUtil.getValue("driverName");
		String url = PropertiesUtil.getValue("url");
		String userName = PropertiesUtil.getValue("userName");
		String passWord = PropertiesUtil.getValue("passWord");
		try {
			Class.forName(driverName);
			conn = DriverManager.getConnection(url, userName, passWord);
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return conn;
	}
	/**
	 * 功能:从数据库获取学生数据的集合
	 * @param 集合	
	 */
	public static List<Student> getStudentsList(){
		List<Student> studentsList = new ArrayList<Student>();
		Connection conn = getConnection();
		String sql = "select * from stuInfo";
		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("name");
				int age = rs.getInt("age");
				String gender = rs.getString("gender");
				Student student = new Student(id,name,age,gender);
				studentsList.add(student);
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally{
			try {
				rs.close();
				stmt.close();
				conn.close();	
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			
		}
		return studentsList;
	}
	public static void main(String[] args) {
		List<Student> studentsList = getStudentsList();
		for (Iterator iterator = studentsList.iterator(); iterator.hasNext();) {
			Student student = (Student) iterator.next();
			int id = student.getId();
			String name = student.getName();
			int age = student.getAge();
			String gender = student.getGender();
			System.out.println(id+":"+name+":"+age+":"+gender);
		}
	}
}


其中mysql数据库、表的创建详情如下:

创建一个students数据库,创建一张stuInfo表,写入4条数据。

创建与数据库一一对应的Student实体类:

public class Student {
	private int id;
	private String name;
	private int age;
	private String gender;
	
	public Student(int id, String name, int age, String gender){
		this.id = id;
		this.name = name;
		this.age = age;
		this.gender = gender;
	}
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public String getGender() {
		return gender;
	}
	public void setGender(String gender) {
		this.gender = gender;
	}
}

最终运行结果:


至此是否已经更理解这句话了?【properties文件则是用于存放一些系统的配置信息,如:webservice地址、公共变量、数据库连接信息等,便于系统的升级维护】?

这个实例中有一段是写sql查询语句的【String sql = "select * from stuInfo";】这样的写法非常不好,耦合性太高。如果客户频繁修改查询条件的话,改动起来非常麻烦,不易维护,如果这条sql语句足够复杂,那么就更能体会什么是耦合性太高了,牵一发而动全身!像这种sql语句也应该写入properties配置文件中。

要尽量避免直接在业务逻辑中做改动!





阅读更多

没有更多推荐了,返回首页