`
AngelAndAngel
  • 浏览: 234358 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

读取properties文件 并解析占位符(借用hibernate代码)

阅读更多
  把hibernate中读取properties文件的代码抽取出来了,直接贴代码:
  java:
 
  
package redolvePlaceHolder;

import java.io.IOException;
import java.io.InputStream;
import java.util.Iterator;
import java.util.Map;
import java.util.Properties;
import java.util.Map.Entry;

/**
 * 此类借用了hibernate读取properties文件的代码,
 * 可以解析占位符比如$
 * @author afei
 *
 */
public class TestMain {

	
	private static final String PLACEHOLDER_START = "${";

	private static Properties pro;
	
	public static void main(String[] args) {
		try {
			pro=buildProperty("afei.properties");
			resolvePlaceHolders(pro);
			printProperties(pro);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	public static void printProperties(Properties p){
		Iterator it=p.entrySet().iterator();
		while(it.hasNext()){
			Entry ent=(Entry)it.next();
			System.out.println(ent.getKey()+" : "+ent.getValue());
		}
	}
	
	
	
	/**
	 * 解析占位符
	 * @param properties
	 */
	public static void resolvePlaceHolders(Properties properties) {
		Iterator itr = properties.entrySet().iterator();
		while ( itr.hasNext() ) {
			final Map.Entry entry = ( Map.Entry ) itr.next();
			final Object value = entry.getValue();
			if ( value != null && String.class.isInstance( value ) ) {
				final String resolved = resolvePlaceHolder( ( String ) value );
				if ( !value.equals( resolved ) ) {
					if ( resolved == null ) {
						itr.remove();
					}
					else {
						entry.setValue( resolved );
					}
				}
			}
		}
	}
	
	/**
	 * 解析占位符具体操作
	 * @param property
	 * @return
	 */
	public static String resolvePlaceHolder(String property) {
		if ( property.indexOf( PLACEHOLDER_START ) < 0 ) {
			return property;
		}
		StringBuffer buff = new StringBuffer();
		char[] chars = property.toCharArray();
		for ( int pos = 0; pos < chars.length; pos++ ) {
			if ( chars[pos] == '$' ) {
				// peek ahead
				if ( chars[pos+1] == '{' ) {
					// we have a placeholder, spin forward till we find the end
					String systemPropertyName = "";
					int x = pos + 2;
					for (  ; x < chars.length && chars[x] != '}'; x++ ) {
						systemPropertyName += chars[x];
						// if we reach the end of the string w/o finding the
						// matching end, that is an exception
						if ( x == chars.length - 1 ) {
							throw new IllegalArgumentException( "unmatched placeholder start [" + property + "]" );
						}
					}
					String systemProperty = extractFromSystem( systemPropertyName );
					buff.append( systemProperty == null ? "" : systemProperty );
					pos = x + 1;
					// make sure spinning forward did not put us past the end of the buffer...
					if ( pos >= chars.length ) {
						break;
					}
				}
			}
			buff.append( chars[pos] );
		}
		String rtn = buff.toString();
		return isEmpty( rtn ) ? null : rtn;
	}
	
	
	
	/**
	 * 构造properties文件
	 * @param path
	 * @throws IOException 
	 */
	public static Properties buildProperty(String path) throws IOException{
		InputStream is=getResourceAsStream("afei.properties");
		pro=new Properties();
		pro.load(is);
		return pro;
	}
	
	
	/**
	 * 构造properties文件的流
	 * @param resource
	 * @return
	 */
	public static InputStream getResourceAsStream(String resource) {
		String stripped = resource.startsWith("/") ?
				resource.substring(1) : resource;

		InputStream stream = null;
		ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
		if (classLoader!=null) {
			stream = classLoader.getResourceAsStream( stripped );
		}
		if ( stream == null ) {
			stream = TestMain.class.getResourceAsStream( resource );
		}
		if ( stream == null ) {
			stream = TestMain.class.getClassLoader().getResourceAsStream( stripped );
		}
		if ( stream == null ) {
			throw new RuntimeException( resource + " not found" );
		}
		return stream;
	}
	
	
	/**
	 * 获得系统属性 当然 你可以选择从别的地方获取值
	 * @param systemPropertyName
	 * @return
	 */
	private static String extractFromSystem(String systemPropertyName) {
		try {
			return System.getProperty( systemPropertyName );
		}
		catch( Throwable t ) {
			return null;
		}
	}
	
	/**
	 * 判断字符串的空(null或者.length=0)
	 * @param string
	 * @return
	 */
	public static boolean isEmpty(String string) {
		return string == null || string.length() == 0;
	}

}


  


afei.properties文件:
javaeye.url=www.iteye.com
javaeye.homepage=duyunfei.iteye.com
javaeye.username=${user.name}
javaeye.password=123456

home=${user.home}
os=${os.name}
userdir=${user.dir}
javaversion=${java.version} 
javahome=${java.home}

fileseparator=${file.separator}
pathseparator=${path.separator}
lineseparator=${line.separator}


 
分享到:
评论
2 楼 AngelAndAngel 2012-08-31  
landy8530 写道
你好,请问一下“把hibernate中读取properties文件的代码抽取出来了,直接贴代码: ”这个hibernate的源码,是在哪个jar包中,源码有吗?类路径是什么?谢谢!

不好意思,这个太久了,你搜一下吧。功能就这么一段代码,copy就可用。
1 楼 landy8530 2012-08-31  
你好,请问一下“把hibernate中读取properties文件的代码抽取出来了,直接贴代码: ”这个hibernate的源码,是在哪个jar包中,源码有吗?类路径是什么?谢谢!

相关推荐

    js读取properties文件

    由于.js直接解析.properties文件并不方便,因此通常会使用第三方库,如`js-properties`,它提供了一个简单的API来读取和写入.properties文件。首先,你需要通过npm安装这个库: ``` npm install js-properties ...

    java 读取properties文件代码

    在Java编程中,Properties文件是一种常用的配置文件格式,用于存储应用程序的配置参数或者环境设置。这些文件通常以键值对的形式存在,例如...理解并熟练运用Properties文件的读取,能让你的Java程序更加灵活和可配置。

    Python实现读取Properties配置文件的方法

    本篇文章将详细探讨如何通过Python来读取并解析`.properties`配置文件。 首先,了解`.properties`文件的格式。这种文件通常用于存储配置信息,其中键值对以等号`=`分隔,每一行代表一个键值对,注释以`#`或`!`开始...

    读取properties文件返回map

    但可以通过第三方库,如`properties-parser`,或者自己编写解析函数来读取并解析文件内容。例如,使用Node.js的`fs`模块和`properties-parser`库: ```javascript const fs = require('fs'); const properties = ...

    读取properties文件内容

    ConfigFile configfile = ConfigFile.getInstance("ipConfig123.properties"); String ip = configfile.getkeyvalue("ip"); 可以取出ipConfig123.properties 文件中IP的内容

    android中读取properties文件

    在Android开发中,读取`properties`文件是一个常见的任务,主要用于存储配置信息或者与Java中的`.properties`文件进行交互。`.properties`文件是一种简单的键值对格式,常用于跨平台的配置存储。以下是对这个主题的...

    读取properties返回map并写入文件

    在上述代码中,我们首先创建一个Properties对象`props`,然后通过`load()`方法从指定路径的文件中读取内容。接着,我们遍历Properties对象的键集,将每个键值对添加到HashMap`map`中。这样,我们就得到了一个键值对...

    java按行读取大文件并解析入库

    为了高效地处理这类问题,我们可以利用Java的`java.nio`包中的BufferedReader和FileChannel等类,实现按行读取大文件,并将其内容解析后存储到数据库中。本文将详细讲解这一过程。 首先,我们需要了解`java.nio`包...

    Spring用代码来读取properties文件实例解析

    Spring读取Properties文件实例解析 Spring框架中,读取Properties文件是一个非常重要的步骤,Properties文件中存储着应用程序的配置信息,如数据库连接信息、Server配置信息等。在Spring应用程序中,我们可以使用@...

    Properties文件解析.zip

    本主题将深入探讨`properties`文件的解析过程,以及如何创建一个工具来帮助我们方便地读取和操作这些文件。 首先,`properties`文件的格式非常简单,由键值对组成,每行一个键值对,键和值之间通过等号(=)或冒号...

    怎样读取properties文件内容

    下面是一段示例代码,展示了如何加载并读取一个名为`sms.properties`的文件: ```java import java.io.FileInputStream; import java.io.InputStream; import java.util.Properties; public class ReadProperties ...

    spring读取properties

    本文将深入解析如何在Spring环境中读取Properties文件,包括配置步骤、代码示例以及注意事项,帮助读者理解和掌握这一核心功能。 ### Spring读取Properties文件的核心知识点 #### 1. **引入...

    属性占位符配置器

    该类作为Spring的容器后处理器,在应用程序上下文初始化阶段自动读取指定的属性文件,并将其中的键值对映射到配置文件中的占位符上,从而完成具体的配置替换。这种机制特别适用于以下场景: - **数据库配置**:如...

    java读取properties配置文件

    通过以上内容,你应该能够理解并实现Java中读取`properties`配置文件的基本操作。在实际项目中,还可以结合Spring框架或者其他配置管理工具,如Apache Commons Configuration,进一步简化配置文件的管理和使用。

    c#操作properties,读写配置文件

    除了`Properties.Settings`类之外,还可以使用`ConfigurationManager`类来读取配置文件中的设置。这种方式适用于那些不希望在代码中硬编码配置项名称的情况。 1. **读取设置**: ```csharp string value = ...

    Android读取properties配置文件的实例详解

    Android读取properties配置文件的实例详解提供了一个非常有用的读取Properties文件的示例代码,并且展示了如何使用读取到的配置信息。这对于Android开发者来说非常有用,可以帮助他们更好地管理应用程序的配置信息。

    ResourceBundle与Properties读取maven中resources目录下的资源文件

    下面是一个读取`a.properties`并创建一个新的`b.properties`文件的示例代码: ```java import java.io.*; import java.util.*; public class PropertyTest { public static void main(String[] args) { ...

    java类读取properties文件

    java类读取properties文件,简单易用,方便快捷。

    Java读取Properties文件几种方法总结

    在上面的代码中,我们首先创建了一个BufferedInputStream对象,用于读取Properties文件,然后创建了一个Properties对象,并使用load()方法将Properties文件加载到Properties对象中。 方法二:使用java.util....

    读取Assets资源文件和Json解析Demo

    在Android应用开发中,我们经常会遇到需要从项目资源文件中读取数据的情况,尤其是非代码文件,如文本、配置文件或JSON数据等。在这种场景下,Android提供了`Assets`目录,用于存放这些非编译型资源。本教程将详细...

Global site tag (gtag.js) - Google Analytics