Java读取.properties文件 的四种方法

本文介绍了一种在Java中加载属性文件的方法,包括通过资源绑定和文件流两种方式,并提供了详细的代码实现及测试方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package com.gzqh.bbs.properties;




import java.io.*;
import java.util.Enumeration;
import java.util.Properties;
import java.util.PropertyResourceBundle;

public class PropertiesLoader {
	/**
	 * 读取属性文件的名称
	 * 最传统的方式
	 * 根据资源文件的名称,找到文件后,进行解析,装到Properties对象中,返回
	 * @param fileName java.util.Properties返回键值对的
	 * @return第一种方法
	 */
	//资源绑定,这种方式,把资源文件(command.properties)当成是一个java类文件来处理
	//1.编译这个文件,系统自动拷贝这个文件到class
	//2.所以这个文件在传递进行解析的时候,无需加后缀名字(properties)
	public java.util.Properties getPropertiesMethod1(String fileName)
			throws java.io.FileNotFoundException{
		//创建一个key\valueProperties类型的对象集合(Map接口的类,父类是Hashtable)
		Properties properties=new Properties();	
		//资源绑定,JDK已经很早就提供了一个资源绑定类
		PropertyResourceBundle resourceBundle=null;
		resourceBundle=(PropertyResourceBundle)PropertyResourceBundle.getBundle(fileName);
		//要打开数据,讲数据放到properties对象中去
		//因为是JDK1.1就有的类,所以使用的还是枚举
		Enumeration enu=resourceBundle.getKeys();
		properties=new Properties();
		while(enu.hasMoreElements()){
			//获取当前的key的值
				String propertyName=enu.nextElement().toString();
				//将资源绑定中的信息,取出来再次进行绑定
				properties.setProperty(propertyName, resourceBundle.getString(propertyName));
		}
		return properties;
	}
	//测试第一种方法
	
	public void test1(PropertiesLoader p){
		String fileName="Command";
		//resourceBundle来读取的,这种是可以不用写.properties后缀的,并且db.properties文件,我们可以
		//当成一个java文件来看待,这个文件可以自动拷贝到java的class文件相对应的class文件相对应的目录下
		Properties properties;
		try {
			properties=p.getPropertiesMethod1(fileName);
			Enumeration enu=properties.keys();
			while(enu.hasMoreElements()){
				System.out.println(properties.getProperty(enu.nextElement().toString()));
			}
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
		public static void main(String[] args) {
			PropertiesLoader p=new PropertiesLoader();
//			p.test1(p);
			p.test2(p);
//			p.test4(p);
		}
		/**
		 * 第二种方法
		 * 文件需要放在工程根目录下面
		 * 文件需要后缀名
		 */
		//当成文件来处理,java.io.*  专门处理文件流
		public Properties getPropertiesMethod2(String propertiesName){
			Properties p=new Properties();
			try {
				//输入缓冲流
				InputStream in=new BufferedInputStream(new FileInputStream(propertiesName));
				p.load(in);
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			return p;
		}
		//测试第二种方法
		public void test2(PropertiesLoader p){
			String fileName="Command.properties";
			Properties properties;
			properties=p.getPropertiesMethod2(fileName);
			System.out.println(properties.getProperty("login"));
			
		}
		/**
		 * 第四种方法
		 * 只会搜索本目录,所以必须放在同一包里
		 */
		public java.util.Properties getPropertiesMethod4(String fileName){
			InputStream in=this.getClass().getResourceAsStream(fileName);
			Properties p=new Properties();
			try {
				p.load(in);
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			return p;
		}
		public void test4(PropertiesLoader p){
			String fileName="Command.properties";
			Properties properties;
			properties=p.getPropertiesMethod4(fileName);
			System.out.println(properties.getProperty("login"));
		}
		
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值