java操作properties文件简单学习

  1. java操作properties文件的工具类简单封装:

    注意:由于本地和环境和linux服务的路径有区别,或者jetty,resin,tomcat部署后,文件的路径也是有区别的。比如我们在linux上把项目放在另一个磁盘下,此时,文件的路径就是项目所在的路径,而不是WEB-INF下,所以,这里需要灵活配置!

  2. package com.sohu.util;
    
    import java.io.BufferedInputStream;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.util.Enumeration;
    import java.util.HashMap;
    import java.util.Map;
    import java.util.Map.Entry;
    import java.util.Properties;
    import java.util.Set;
    
    import org.springframework.core.io.ClassPathResource;
    
    /**
     * 测试properties读写处理
     * @author liweihan ()
     * @version 1.0 (2015年1月6日 下午2:23:27)
     */
    public class TestProperties {
    
    	/**
    	 * 说明:很多时候我们为了减轻数据库的压力,或者减少我们的服务的压力。
    	 * 对于不经常变的数据,我们可以放在配置文件中!
    	 * 
    	 *     
    	 *     containsKey()
    	 * 
    	 */
    	private static String PFILE = null;
    	public static final boolean OS_LINUX = "/".equals(File.separator);  
    	 static{
    	        Properties p = new Properties();
    	    	try {
    		        if(OS_LINUX) {
    		        	//方法1:
    		        	//p.load(TestProperties.class.getClassLoader().getResourceAsStream("config.properties"));
    		        
    		        	//方法2:还可以用这个方法加载
    		        	p.load(new ClassPathResource("config.properties").getInputStream());
    		        
    		        	//方法3:--应该用在具体路径的地方
    //		        	InputStream in = new BufferedInputStream(new FileInputStream("config.properties"));
    //		        	p.load(in);
    		        } else {
    		        	//方法1:
    		        	//p.load(TestProperties.class.getClassLoader().getResourceAsStream("config-windows.properties"));
    		        
    		        	//方法2:
    		        	p.load(new ClassPathResource("config-windows.properties").getInputStream());
    		        
    		        	//方法3:---应该用在具体路径的地方
    //		        	InputStream in = new BufferedInputStream(new FileInputStream("config-windows.properties"));
    //		        	p.load(in);
    		        
    		        }
    		        PFILE = p.getProperty("goodsongPath").trim();
    	    	} catch (IOException e) {
    				e.printStackTrace();
    			} 
    	    }
    
    	//属性文件全名
    //	private static final String PFILE = "D:\\liweiSohu\\workspaceForEclipse\\R20141229_han\\search-star-HDSS-STAR-WEB-F\\src\\main\\resources\\goodsong.properties";
    	//上面是windows系统本地测试,下面是linux系统
    //	private static final String PFILE = System.getProperty("user.dir") + File.separator + "goodsong.properties";
    
    	//对应于属性文件的文件对象变量
    	private File m_file = null;
    	//属性文件的最后修改日期
    	private long m_lastModifiedTime = 0;
    	//属性文件所对应的属性对象变量
    	private Properties m_props = null;
    
    	//本类可能存在的唯一的唯一实例
    	private static TestProperties m_instance = new TestProperties();
    
    	/**
    	 * 私有构造方法,用以保证外界无法直接实例化
    	 */
    	private TestProperties() {
    		m_file = new File(PFILE);
    		m_lastModifiedTime = m_file.lastModified();
    
    		if (m_lastModifiedTime == 0) {
    			System.err.println(PFILE + " file does not exist !");
    		}
    		m_props = new Properties();
    		try {
    			m_props.load(new FileInputStream(PFILE));
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    	}
    
    	/**
    	 * 返回单一实例
    	 * @return
    	 * 
    	 * 2015年1月6日 下午2:58:02
    	 * liweihan
    	 */
    	public static synchronized TestProperties getInstance() {
    		System.out.println(" ---- :" + System.getProperty("user.dir"));
    		return m_instance;
    	}
    
    	/**
    	 * 读取一特定的属性项
    	 * @param name		属性项的项名
    	 * @param defaultVal	属性项的默认值
    	 * @return	属性项的值(如果此项存在),默认值(如此项不存在)
    	 * 
    	 * 2015年1月6日 下午3:01:05
    	 * liweihan
    	 */
    	public Object getConfigItem(String name,Object defaultVal) {
    		long newTime = m_file.lastModified();
    		//检查属性文件是否被其他的程序修改过,如果是,重读此配置文件
    		if (newTime == 0) {
    			//属性文件不存在
    			if (m_lastModifiedTime == 0) {
    				System.err.println(PFILE + " file does not exist !");
    			} else {
    				System.err.println(PFILE + " file was deleted !");
    			}
    
    			return defaultVal;
    		} else if (newTime > m_lastModifiedTime) {
    			//属性文件被修改过,重新加载配置文件
    			m_props.clear();
    			try {
    				m_props.load(new FileInputStream(PFILE));
    			}  catch (Exception e) {
    				e.printStackTrace();
    			}
    		}
    		m_lastModifiedTime = newTime;
    		Object val = m_props.getProperty(name);
    		if (val == null) {
    			return defaultVal;
    		} else {
    			return val;
    		}
    	}
    
    	/**
    	 * 根据指定的属性名获得属性值
    	 * @param itemName
    	 * @return
    	 * 
    	 * 2015年1月6日 下午3:39:55
    	 * liweihan
    	 */
    	public String getValue(String itemName) {
    		return m_props.getProperty(itemName);
    	}
     
    	/**
    	 * 设置属性名和属性值[此设置并不能保存到配置文件中]
    	 * @param itemName
    	 * @param value
    	 * 
    	 * 2015年1月6日 下午3:45:08
    	 * liweihan
    	 */
    	public void setValue(String itemName,String value) {
    		m_props.setProperty(itemName, value);
    		return;
    	}
    
    	/**
    	 * 保存配置文件,指定文件名和抬头描述
    	 * @param fileName
    	 * @param description
    	 * 
    	 * 2015年1月6日 下午3:56:09
    	 * liweihan
    	 * @throws Exception 
    	 */
    	public void saveFile(String fileName,String description) throws Exception {
    		try {
    			FileOutputStream fout = new FileOutputStream(fileName);
    			m_props.store(fout, description);//保存文件
    			fout.close();
    		} catch (Exception e) {
    			System.out.println("无法保存指定的配置文件:" + fileName);
    			throw new Exception("无法保存指定的配置文件:" + fileName);
    //			e.printStackTrace();
    		} 
    	}
    
    	/**
    	 * 保存指定的配置文件
    	 * @param fileName
    	 * 
    	 * 2015年1月6日 下午3:59:04
    	 * liweihan
    	 * @throws Exception 
    	 */
    	public void saveFile(String fileName) throws Exception {
    		saveFile(fileName,"");
    	}
    
    	/**
    	 * 保存指定文件,采用原有名字
    	 * 
    	 * 
    	 * 2015年1月6日 下午4:01:49
    	 * liweihan
    	 */
    	public void saveFile() throws Exception{
    		if (PFILE.length() == 0) {
    			throw new Exception(PFILE + " file does not exist !");
    		}
    		saveFile(PFILE);
    	}
    
    	/**
    	 * 得到配置文件中所有的key和value值,并放在一个map结合中
    	 * @return
    	 * 
    	 * 2015年1月6日 下午4:50:39
    	 * liweihan
    	 */
    	public Map<String, String> getAllKeyAndValue() {
    		Map<String, String> map = new HashMap<String, String>();
    
    		Enumeration en = m_props.propertyNames();
    		//遍历
    		while (en.hasMoreElements()) {
    			String key = en.nextElement().toString();//key值
    			String value = m_props.getProperty(key);
    			map.put(key, value);
    		}
    		return map;
    	}
    
    	/**
    	 * 得到配置文件中所有的key和value值,并放在一个map结合中2
    	 * @return
    	 * 
    	 * 2015年1月7日 下午6:33:41
    	 * liweihan
    	 */
    	public Map<String, String> getAllKeyAndValue2() {
    		Map<String, String> map = new HashMap<String, String>();
    
    		m_props.list(System.out);
    		Object[] objs = m_props.keySet().toArray();
    		for (int i = 0; i < objs.length; i++) {
    			map.put(objs[i].toString(), m_props.get(objs[i]).toString());
    		}
    		return map;
    	}
    
    	public static void main(String[] args) {
    
    		//1.获得java虚拟机的参数
    		Properties pps = System.getProperties();
    		pps.list(System.out);
    
    	}
    
    }

3.测试代码:

		TestProperties p = TestProperties.getInstance();
		String result = (String)p.getConfigItem(sid, "0");
		System.out.println("result:" + result);

		String result2 = p.getValue(sid);
		System.out.println("result2: " + result2);

/*		p.setValue("54418", "hanchao");
		p.setValue("20", "cc");*/
		p.setValue(key != null ? key : "0", value != null ? value : "0");

		try {
//			p.saveFile("system.conf","System.Global.Configuration");
			p.saveFile();
			if (key != null && value != null) {
				setStarIdAndSpaceIdToLocalCache();
			}
		} catch (Exception e) {
			e.printStackTrace();
		}

		Map<String, String> map = p.getAllKeyAndValue2();
		for(Entry<String, String> en : map.entrySet()) {
			System.out.println("key:" + en.getKey() + ", value :" + en.getValue());
		}
		

* 参考:http://wenku.baidu.com/link?url=-02_xrVX1_OQn0a1EcGDQ-LYQ08QXkmVMHHJ7z_aliEkG_4orbP94fjdAf4V5em7PfNXISGbN1gmmRWWED_GrnEDAXWPEsCwCmrsDaUr82W

*     http://wenku.baidu.com/view/bbe96f6e25c52cc58bd6be99.html

*     http://www.cnblogs.com/bakari/p/3562244.html

*

*     加载的六种方法:

*     http://blog.csdn.net/Senton/article/details/4083127

时间: 2024-10-24 18:09:31

java操作properties文件简单学习的相关文章

JAVA操作properties文件

java中的properties文件是一种配置文件,主要用于表达配置信息,文件类型为*.properties,格式为文本文件,文件的内容是格式是"键=值"的格式,在properties文件中,可以用"#"来作注释,properties文件在Java编程中用到的地方很多,操作很方便.一.properties文件test.properties------------------------------------------------------###########

转载:java基础学习总结——java读取properties文件总结

java基础学习总结--java读取properties文件总结 一.java读取properties文件总结 在java项目中,操作properties文件是经常要做的,因为很多的配置信息都会写在properties文件中,这里主要是总结使用getResourceAsStream方法和InputStream流去读取properties文件,使用getResourceAsStream方法去读取properties文件时需要特别注意properties文件路径的写法,测试项目如下: 1.1.项目的

JAVA使用和操作properties文件

java中的properties文件是一种配置文件,主要用于表达配置信息,文件类型为*.properties,格式为文本文件,文件的内容是格式是"键=值"的格式,在properties文件中,可以用"#"来作注释,properties文件在Java编程中用到的地方很多,操作很方便.Properties 类存在于包 Java.util 中,该类继承自 Hashtable. 1. getProperty ( String  key) ,   用指定的键在此属性列表中搜索

java基础学习总结——java读取properties文件总结

一.java读取properties文件总结 在java项目中,操作properties文件是经常要做的,因为很多的配置信息都会写在properties文件中,这里主要是总结使用getResourceAsStream方法和InputStream流去读取properties文件,使用getResourceAsStream方法去读取properties文件时需要特别注意properties文件路径的写法,测试项目如下: 1.1.项目的目录结构 1.2. java读取properties文件代码测试

Java读properties文件中文乱码问题的解决方法

java读properties文件,包含中文字符的主要有两种: 1.key中包含中文字符的(value中也有可能包含) 2.key中不包含中文字符的(value中有可能包含) 1.key中包含中文字符 可以使用java自带工具native2ascii.exe(Java\jdk1.x.x\bin\native2ascii.exe),转换文件编码格式 示例: native2ascii -encoding 8859_1 c:\a.properties c:\b.properties 即将 c:\a.p

Java操作属性文件,支持新增或更新多个属性

Java操作属性文件,支持新增或更新多个属性 一.更新或新增单个属性的方法 /** * 写入properties信息 * @param filePath 绝对路径(包括文件名和后缀名) * @param parameterName 名称 * @param parameterValue 值 */ public static void writeProperties(String filePath, String parameterName, String parameterValue) { Pro

Java操作Redis的简单实例

Java操作Redis是必备学习的内容,那我直接上一个超级简单的案例给大家参考下! 一.创建RedisTest类,代码如下! import redis.clients.jedis.Jedis; public class RedisTest {     public static void main(String[] args) {         // TODO Auto-generated method stub         //连接redis服务         Jedis jedis 

Java获取.properties文件

@SuppressWarnings("rawtypes") public static void getProperties() { Properties properties = null; InputStream in = null; try { properties = new Properties(); //获取文件 in = Object.class.getResourceAsStream("/config.properties"); properties

Java读取Properties文件的六种方法

使用J2SE API读取Properties文件的六种方法 1.使用java.util.Properties类的load()方法 示例: InputStream in = lnew BufferedInputStream(new FileInputStream(name)); Properties p = new Properties(); p.load(in); 2.使用java.util.ResourceBundle类的getBundle()方法 示例: ResourceBundle rb