package com.iamberry.wechat.tools;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Enumeration;
import java.util.Map;
import java.util.Properties;

import javax.servlet.ServletContext;

import org.apache.commons.collections.map.HashedMap;
import org.springframework.web.context.ContextLoader;
import org.springframework.web.context.WebApplicationContext;
/**
 *		description: 读写配置文件工具
 * 	   		@author: 张应真
 *	    @createDate: 2016年6月13日
 */
public class PropertiesUtils {
//	private static final String PATH = "config.properties";
//	private static final String OUTPATH = "/WEB-INF/classes/ResultInfo.properties";

	/**
	 *  根据key读取value
	 * @param in
	 * @param key
	 * @return
	 */
	public static String readValue(InputStream in, String key) {
		Properties props = new Properties();
		try {
	//		InputStream in = new BufferedInputStream(new FileInputStream(filePath));
			props.load(in);
			String value = props.getProperty(key);
			System.out.println("key:"+key +"====================="+ "value:"+value);
			return value;
		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
	}

	/**
	 *  读取properties的全部信息
	 * @param in
	 * @return
	 */
	@SuppressWarnings("unchecked")
	public static Map<String,String>readProperties(InputStream in) {
		Properties props = new Properties();
		Map<String, String> map=new HashedMap();
		try {
		//	InputStream in = new BufferedInputStream(new FileInputStream(path));
			props.load(in);
			Enumeration en = props.propertyNames();
			while (en.hasMoreElements()) {
				String key = (String) en.nextElement();
				String Property = props.getProperty(key);
				map.put(key, Property);
			//	System.out.println(key +"-----"+ Property);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		return map;
	}

	/**
	 *  写入properties信息
	 * @param outpath
	 * @param parameterName
	 * @param parameterValue
	 */
	public static void writeProperties(String outpath, String parameterName,String parameterValue) {
		Properties prop = new Properties();
		try {
			//获取ResultInfo.properties路径
//			WebApplicationContext webApplicationContext = ContextLoader.getCurrentWebApplicationContext();    
//	        ServletContext servletContext = webApplicationContext.getServletContext(); 
//	        InputStream in=servletContext.getResourceAsStream(outpath);
			 InputStream in =new FileInputStream(outpath);
			// 从输入流中读取属性列表（键和元素对）
			prop.load(in);
			// 调用 Hashtable 的方法 put。使用 getProperty 方法提供并行性。
			// 强制要求为属性的键和值使用字符串。返回值是 Hashtable 调用 put 的结果。
			OutputStream fos = new FileOutputStream(outpath);
			prop.setProperty(parameterName, parameterValue);
			// 以适合使用 load 方法加载到 Properties 表中的格式，
			// 将此 Properties 表中的属性列表（键和元素对）写入输出流
			prop.store(fos, "Update '" + parameterName + "' value '"+ parameterValue+"'");
		} catch (IOException e) {
			e.printStackTrace();
			System.err.println("路径： " + outpath + "----键："+ parameterName + "----值：");
		}
	}

//	public static void main(String[] args) {
//
//	}
}
