JAVA通信编程(二)——如何读取java的properties配置文件(插播)

如何读取java的properties配置文件本不属于java通讯编程这个系列的范畴,但是在做一些应用中编写通讯编程需要读取一些通讯参数,这样可以使程序更加的通用化。并且博主在读取properties文件中遇到了点小坑,在这里说明一下,防止各位读者遇到同样的麻烦。

其实问一下度娘,就有很多信息关于如何读取java的properties配置文件的,这里我做一下小封装。

package com.zzh.comm;

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
import java.util.Set;

import org.apache.log4j.Logger;

public final class ReadProperties
{
	private static Logger logger = Logger.getLogger(Object.class.getName());
	
	public Map<String, String> getPropertiesMap(String fileName)
	{
		Map<String,String> map  = new HashMap<String,String>();
		Properties prop = new Properties();
		InputStream in = null;
		try
		{
			in = Object.class.getResourceAsStream(fileName);
			prop.load(in); 
			
			Set<String> set = prop.stringPropertyNames();
			for(String s: set)
			{
				String value = prop.getProperty(s);
				if(value != null)
				{
					map.put(s,value);
				}
			}
		}
		catch(Exception e)
		{
			logger.error(e.getMessage());
		}
		finally
		{
			if(in != null)
			{
				try
				{
					in.close();
				}
				catch (IOException e)
				{
					logger.error(e.getMessage());
				}
			}
		}
		
		return map;
	}
}
这样可以通过Map<String,String> map = new ReadProperties().getPropertiesMap(fileName);的方式很方便的读取配置文件中的内容,然后在上层应用中直接读取Map中的参数。

这里主要关注下in = Object.class.getResourceAsStream(fileName);这一句,博主是在Eclipse下建立的一个project来编写这个程序,我直接在project存放properties文件,但是当我将project打成jar包然后在linux下独立运行的时候就会发生错误,主要是因为涉及到一些规范,需要将properties存放在某些规定的目录下,而并不在project下,即不在打包的jar中,所以这样是会有读取错误的,需要将in = Object.class.getResourceAsStream(fileName);换成in = new BufferedInputStream(new FileInputStream(new File(fileName)));这样可以读取非classpath路径下的properties文件,反之,如果要读取classpath下的properties文件需要采用in = Object.class.getResourceAsStream(fileName);这种方式或者类似的方式。

上一篇:Shell脚本经典之Fork炸弹


下一篇:linux makefile文件