`
dyccsxg
  • 浏览: 205310 次
  • 性别: Icon_minigender_1
  • 来自: 青岛
社区版块
存档分类

Java常用功能代码[ 2 ]

    博客分类:
  • Java
阅读更多

1. 加载所有 jar 包中同名的配置文件

/**
 * 加载所有 jar 包中同名的配置文件
 * @param resourceName
 * @param classLoader
 * @return
 * @throws IOException
 */
public static Properties loadAllProperties(String resourceName, 
		ClassLoader classLoader) throws IOException {		
	Properties properties = new Properties();
	Enumeration<URL> urls = classLoader.getResources(resourceName);
	while (urls.hasMoreElements()) {
		URL url = urls.nextElement();
		InputStream is = null;
		try {
			URLConnection con = url.openConnection();
			con.setUseCaches(false);
			is = con.getInputStream();
			properties.load(is);
		} finally {
			if (is != null) {
				is.close();
			}
		}
	}// end while
	return properties;
}// end method loadAllProperties().

  

2. 通过反射读写对象的属性值

/**
 * 设置对象实例的一个属性值
 * @param obj
 * @param fieldName
 * @param value
 */
public static void setFieldValue(Object obj,String fieldName,Object value){
	try {
        Field field = obj.getClass().getDeclaredField(fieldName);
        // step1 set public field
        if((field.getModifiers() & Modifier.PUBLIC) != 0){
        	field.set(obj, value);
        	return;
        }
        // step2 invoke public setMethod
        String setMethod = "set" 
        	+ Character.toUpperCase(fieldName.charAt(0)) 
        	+ fieldName.substring(1);
        Method method = obj.getClass().getDeclaredMethod(setMethod, new Class[]{value.getClass()});
        if((method.getModifiers() & Modifier.PUBLIC) != 0){
        	method.invoke(obj, value);
        	return;
        }
        // step3 directly set value
        field.setAccessible(true);
        field.set(obj, value);
        field.setAccessible(false);
    } catch (NoSuchFieldException e) {
    } catch(NoSuchMethodException e){
    } catch(Exception e){
    }
}
/**
 * 返回对象实例的一个属性值
 * @param obj
 * @param fieldName
 * @return
 */
public static Object getFieldValue(Object obj,String fieldName){
	Object value = null;
	try {
        Field field = obj.getClass().getDeclaredField(fieldName);
        // step1 get public field
        if((field.getModifiers() & Modifier.PUBLIC) != 0){
        	return field.get(obj);
        }
        // step2 invoke public getMethod
        String getMethod = "get" 
        	+ Character.toUpperCase(fieldName.charAt(0)) 
        	+ fieldName.substring(1);
        Method method = obj.getClass().getDeclaredMethod(getMethod, new Class[]{});
        if((method.getModifiers() & Modifier.PUBLIC) != 0){
        	return method.invoke(obj);
        }
        // step3 directly get value
        field.setAccessible(true);
        value = field.get(obj);
        field.setAccessible(false);
    } catch (NoSuchFieldException e) {
    } catch(NoSuchMethodException e){
    } catch(Exception e){
    }
    return value;
}

 

3. 字符串前缀填充

	/**
	 * 字符串前缀填充
	 * @param max 最大长度
	 * @param ch  填充字符
	 * @param value 原始值
	 * @return
	 */
	public static String fillPrefix(int max, char ch, String value){
		if (value == null || value.length() >= max){
			return value;
		}
		StringBuilder sb = new StringBuilder(value);
		for (int i=value.length(); i<max; i++){
			sb.insert(0, ch);
		}
		return sb.toString();
	}

 

4. 首选项读写 [数据持久化到操作系统中]

import java.util.prefs.*;

public class Main{

    public static void main(String[] args){
        
        Preferences prefs = Preferences.userNodeForPackage(Main.class);
        int freeTimes = prefs.getInt("freeTimes", 10);
        freeTimes--;
        prefs.putInt("freeTimes", freeTimes);
        
        if (freeTimes < 0){
            System.out.println("已过期,不可运行.");
            System.exit(0);
        }
        System.out.println("还可运行 [" + freeTimes + "] 次."); 
    }
}

 

5. 动态编译 Java 源文件

package org.demo.compiler;

import java.io.IOException;
import java.lang.reflect.Method;
import java.net.URI;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import javax.tools.JavaCompiler;
import javax.tools.JavaFileObject;
import javax.tools.SimpleJavaFileObject;
import javax.tools.StandardJavaFileManager;
import javax.tools.ToolProvider;
import javax.tools.JavaCompiler.CompilationTask;

/**
 * 动态编译
 * 参考: http://www.infoq.com/cn/articles/cf-java-byte-code
 * @author  
 * @date    2010-12-26
 * @file    org.demo.compiler.DynamicCompiler.java
 */
public class DynamicCompiler {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		
		System.out.println(calculate("(3+4)*7 - 10"));
	}
	/**
	 * 计算表达式的值
	 * @param expression
	 * @return
	 */
	private static double calculate(String expression){
		// class info
		String className = "CalculatorMain";
	    String methodName = "calculate";
	    String source = "public class " + className + "{"
	    	+ " public static double " + methodName + "(){"
	    	+ "  return " + expression + ";"
	    	+ " }"
	    	+ "}";
	    // compilation units
	    StringJavaFileObject obj = new StringJavaFileObject(className, source);
	    Iterable<? extends JavaFileObject> fileObjs = Arrays.asList(obj);
	    // compiler options
	    String path = DynamicCompiler.class.getClassLoader()
		                             .getResource("").getPath();
		if (path.startsWith("/")){
			path = path.substring(1);
		}
		List<String> options = new ArrayList<String>();
		options.add("-d");
		options.add(path);
		// compile the dynamic class
	    JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
		StandardJavaFileManager fileMgr = compiler.getStandardFileManager(null, null, null);
		CompilationTask task = compiler.getTask(null, fileMgr, null, options, null, fileObjs);
		boolean result = task.call();
		// invoke the method
		if (result){			
			ClassLoader loader = DynamicCompiler.class.getClassLoader();
			try {
				Class<?> clazz = loader.loadClass(className);
				Method method = clazz.getMethod(methodName, new Class[]{});
				Object value = method.invoke(null, new Object[]{});
				return (Double)value;
			} catch (Exception e){
				e.printStackTrace();
				throw new RuntimeException("内部错误: " + e.getMessage());
			}
		} else {
			throw new RuntimeException("错误的表达式: " + expression);
		}
	}	
	/**
	 * 基于 String 的 java 对象
	 * @author 
	 *
	 */
	static class StringJavaFileObject extends SimpleJavaFileObject{

		private String content = null;
		
		protected StringJavaFileObject(String className, String content) {
			super(
			    URI.create("string:///" + className.replace('.', '/') + Kind.SOURCE.extension), 
				Kind.SOURCE
		    );
			this.content = content;
		}
		
		@Override
		public CharSequence getCharContent(boolean ignoreEncodingErrors)
				throws IOException {
			return content;
		}
	}
}

 

6. 在 java 中执行 javascript

    http://www.ibm.com/developerworks/cn/java/j-lo-jse66/index.html

package org.demo.javascript;

import javax.script.Invocable;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;

/**
 * 在 java 中执行 javascript
 * @author  
 * @date    2010-12-26
 * @file    org.demo.javascript.JsMain.java
 */
public class JsMain {
	public static void main(String[] args) {
		
		String js = "println('Hello world!');"
			+ "function getDatetime(){"
			+ " var date = new Date();"
			+ " var year = date.getFullYear();"
			+ " var month = date.getMonth() + 1;"
			+ " var day = date.getDate();"
		    + " var hour = date.getHours();"
		    + " var minute = date.getMinutes();"
		    + " var second = date.getSeconds();"
			+ " if (month < 10){ month = '0' + month;}"
			+ " if (day < 10){day = '0' + day;}"
			+ " if (hour < 10){hour = '0' + hour;}"
			+ " if (minute < 10){minute = '0' + minute;}"
			+ " if (second < 10){second = '0' + second;}"
			+ " return year + '-' + month + '-' + day + ' '" 
			+ "             + hour + ':' + minute + ':' + second;"
			+ "}";
		
		ScriptEngineManager manager = new ScriptEngineManager();
		ScriptEngine engine = manager.getEngineByName("javascript");
		try {
			engine.eval(js);
			
			if (engine instanceof Invocable){
				Invocable invocable = (Invocable)engine;
				Object result = invocable.invokeFunction("getDatetime");
				System.out.println(result);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

Aviator 一个基于 java 的表达式引擎
   
http://code.google.com/p/aviator/

 

7. END

分享到:
评论

相关推荐

    java常用开发代码4,Spring

    2. **依赖注入**:Spring的核心特性之一是依赖注入,它允许开发者在运行时将对象与它们的依赖关系组合在一起,而不是在代码中硬编码这些依赖。这增强了代码的可测试性和可维护性。 3. **Spring MVC**:Spring的...

    Java常用源程序代码

    在“Java常用源程序代码”这个压缩包中,我们能够找到一系列与Java编程相关的源代码文件,这些文件被精心组织在不同的文件夹中,每个文件夹都代表着一个特定的主题或功能领域。通过深入研究这些代码,我们可以学习到...

    java常用开发代码2面试

    以下是对Java常用开发代码的一些核心知识点的详细阐述: 1. **基础语法**:Java的基础语法包括变量声明、数据类型(如整型、浮点型、字符型、布尔型)、运算符(算术、比较、逻辑、位操作等)、流程控制(if语句、...

    20个开发人员非常有用的Java功能代码(推荐)

    20个开发人员非常有用的Java功能代码

    java常用代码

    本压缩包“java常用代码”集合了一系列基础到进阶的Java代码示例,涵盖了多个关键领域,有助于初学者快速掌握Java编程的核心概念。 1. **遗产算法**:在Java中,继承是面向对象特性之一,它允许一个类(子类)继承...

    Java常用代码整理

    在"Java常用代码整理"这个主题中,我们可以探讨多个Java编程中的关键知识点,包括基础语法、面向对象特性、异常处理、集合框架、IO流、多线程、网络编程以及实用工具类等。 1. **基础语法**:Java的基础语法包括...

    Java常用代码

    各种Java功能代码,Java访问XML文件,Java数据库访问技术,Java对工作方式日期的处理

    java 常用实验代码

    在“java常用实验代码”这个文档中,我们可以看到一系列与Java编程相关的实践项目,旨在帮助学习者深入理解Java的核心概念和技术。以下是这些实验代码所涵盖的知识点的详细解释: 1. **接口定义及实现**: Java...

    Java基本常用代码示例

    这个名为“Java基本常用代码示例”的资源集包含了Java程序设计中的一些基础和常见代码片段,对于初学者或需要复习基本概念的开发者来说非常有用。下面我们将深入探讨这些标签所涵盖的Java基本知识点。 1. **数据...

    100多个非常有用的java功能代码

    "100多个非常有用的Java功能代码"集合就是这样一个资源库,它包含了大量经过验证、优化的代码示例,可以帮助程序员快速解决实际问题。这个压缩包可能包含了从基础操作到高级特性的广泛代码示例,对于学习和提升Java...

    四种常用的java代码扫描工具介绍

    本文主要介绍了四种常用的 Java 代码扫描工具,并对它们的功能、特性等方面进行了分析和比较。这些工具分别是 Checkstyle、FindBugs、PMD 和 Jtest。静态代码分析是指无需运行被测代码,仅通过分析或检查源程序的...

    java常用jar包

    "java常用jar包"这个主题涵盖了Java与数据库交互以及日志管理的核心库。这里我们将深入探讨其中涉及的几个关键知识点。 首先,对于"用于SqlServer2000和SqlServer2005数据库连接"的jar包,主要指的是JDBC驱动,Java...

    常用 单位换算器 Java 源代码

    本项目“常用单位换算器 Java源代码”提供了一个实用的工具,能够帮助用户进行长度、时间、温度等常见物理量的单位转换。下面将详细介绍这个项目中的关键知识点。 首先,我们来探讨Java编程基础。Java是一种面向...

    一个java常用类库的源代码

    总之,这份"一个java常用类库的源代码"资源对于Java程序员来说是一份宝藏。通过研究源码,不仅可以巩固基础,还能了解和学习到最新的编程技术和设计理念,从而提高编程效率和软件质量。无论是初学者还是经验丰富的...

    一些java常用的工具类

    这些类通常以“Utils”或“Helper”结尾,如Apache Commons Lang中的StringUtils、ArraysUtils等,它们提供了字符串操作、数组处理等常用功能。 在给定的压缩包文件"easycms-common-1.0"中,我们可以推测这是一个...

    java常用代码工具包

    这个"java常用代码工具包"中的"新建文件夹"可能包含了上述功能的实现代码或配置文件。使用时,开发者需要将这些代码导入到项目中,通过引用和调用来利用这些工具类。同时,阅读和理解这些工具类的源代码也是一种学习...

    java源代码,java源代码

    15. **Spring框架**:Spring是Java开发中最常用的框架之一,它提供了依赖注入、AOP(面向切面编程)等功能,极大地简化了企业级应用的开发。 16. **JDBC**:Java Database Connectivity,用于连接Java应用程序和...

    java常用系统类库实验

    ### Java常用系统类库实验详解 #### 实验概述与目标 本次实验主要聚焦于Java的预定义类,尤其是那些在日常编程中频繁使用的系统类库。实验旨在加深学生对Java预定义类的理解,掌握常用类的运用技巧,以及熟练方法...

Global site tag (gtag.js) - Google Analytics