`
sungang_1120
  • 浏览: 310943 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
收藏列表
标题 标签 来源
算法数据结构资源 java
https://www.cs.usfca.edu/~galles/visualization/Algorithms.html
http://visualgo.net/


//codeforces
http://codeforces.com/

//数据结构
http://www.jisuanke.com/course

//郝斌数据结构视频
http://down.51cto.com/zt/306

//网易公开课  机器学习视频
http://open.163.com/special/opencourse/machinelearning.html
学习视频url java
//Python网络爬虫实战-Scrapy(已完结)
http://www.maiziedu.com/course/python/458-7430/

//Mongodb最佳实践(已完结)
http://www.maiziedu.com/course/php/395-4445/
//HTML5+CSS3快速入门(已完结)
http://www.maiziedu.com/course/web/228-2627/
//scala教程
http://www.maiziedu.com/course/others/521-7132/


//高等数学
http://video.1kejian.com/video/?12395-0-0.html
gitbooks url java
**************************规范约定*******************************
//git books
https://www.gitbook.com/explore
//kancloud
http://www.kancloud.cn/explore

https://www.gitbook.com/book/wastemobile/gitbook-chinese/details //GitBook 中文解說 - 2.4

https://www.gitbook.com/book/jervyshi/google-java-styleguide-zh/details //Google JAVA编程规范

**************************JAVA*******************************

https://www.gitbook.com/book/askingwindy/gitbook-java-interview-note/details  //Java面试准备
http://www.admin10000.com/document/6919.html //Java面试准备


http://www.kancloud.cn/kancloud/the-art-of-programming //编程之法:面试和算法心得

https://waylau.gitbooks.io/jersey-2-user-guide/content/ //Jersey 2.x 用户指南

https://qbgbook.gitbooks.io/spring-boot-reference-guide-zh/content/ //Spring Boot参考指南

https://www.gitbook.com/book/kimmking/springbatchreference/details //Spring Batch参考文档中文版

https://www.gitbook.com/book/czeng/spring-data/details //Spring Data 中文版本

https://www.gitbook.com/book/waylau/apache-shiro-1-2-x-reference/details //Shiro User Guide中文翻译

**************************Python******************************
//python 学习
http://www.kancloud.cn/kancloud/python3-cookbook/


**************************前端类*******************************

https://checkcheckzz.gitbooks.io/angularjs-learning-notes/content/ //AngularJS学习笔记
//2015年50+ JavaScript 工具、资源合集
http://www.kancloud.cn/kancloud/javascript-resources-2015

**************************工具类*******************************

https://dongchuan.gitbooks.io/gradle-user-guide-/content/ //Gradle User Guide 中文版

**************************NO sql*******************************

https://kelby.gitbooks.io/rails-beginner-s-guide/content/ //Rails 4-2-stable 参考手册(Beta)

*************************运维********************************

https://www.gitbook.com/book/kisspuppet/puppet/details //Puppet运维实战

*************************大数据********************************

ELKstack 中文指南
https://www.gitbook.com/book/chenryn/kibana-guide-cn/details

************************* MQ ********************************

http://geewu.gitbooks.io/rabbitmq-quick/content/index.html//rabbitMQ 快速上手文档 

************************* 网络编程 ********************************

https://www.gitbook.com/book/waylau/apache-mina-2-user-guide/details //MINA User Guide中文翻译

http://www.kancloud.cn/kancloud/essential-netty-in-action //Essential Netty in Action 《Netty 实战(精髓)》

*************************云计算*******************************

https://yeasy.gitbooks.io/docker_practice/content/ //Docker —— 从入门到实践
https://joshhu.gitbooks.io/docker_theory_install/content/ //最完整的Docker聖經 - Docker原理圖解及全環境安裝


************************查询*********************************
http://es.xiaoleilu.com/ //Elasticsearch 权威指南(中文版)
//Spring-data-elasticsearch
http://es.yemengying.com/ 

*************************第三方*******************************

https://www.gitbook.com/book/wohugb/alipay-direct/details //支付宝即时到账交易接口
不错在线URL地址 java
//各种技术经验总结
https://github.com/lyfeyaj/awesome-resources#web-%E5%89%8D%E7%AB%AF
//infoQ
http://www.infoq.com/cn/rest-deep-dive
//jquery之家
http://www.htmleaf.com/jQuery/
//国外java 网站
http://www.javacodegeeks.com/


//架构
http://www.aboutyun.com/thread-12095-1-1.html
//互联网公司技术架构资料:淘宝、百度、腾讯、新浪、京东资料汇总
https://github.com/Qihoo360/Atlas/blob/master/README_ZH.md//360 MySQL中间层 Atlas



//云计算 & 虚拟化 & 大数据
//openstack版本下载
https://wiki.openstack.org/wiki/Releases
//IBM Opecstack安装介绍
https://www.ibm.com/developerworks/community/blogs/5144904d-5d75-45ed-9d2b-cf1754ee936a/entry/deploy_openstack_with_packstack?lang=en
//学习linux网站
http://bbs.hh010.com/
//docker
http://yuedu.baidu.com/ebook/d817967416fc700abb68fca1?fr=aladdin&key=docker###//入门教程
http://www.aboutyun.com/forum.php//about 云

http://archive.ics.uci.edu/ml/datasets.html//hadoop 离线日志分析数据格式
http://hadooptutorial.info/category/hadoop/  //hadoop 国外学习网站
http://www.iteblog.com/ //大数据学习网站

//Spark Streaming Examples
https://github.com/apache/spark/tree/master/examples/src/main/java/org/apache/spark/examples
https://github.com/apache/spark/tree/master/examples/src/main/java/org/apache/spark/examples/streaming


//hadoop 下载地址
http://apache.fayea.com/hadoop/common/
//hadoop 大数据集测试数据
http://archive.ics.uci.edu/ml/datasets.html
//hbase中文文档
http://yankaycom-wordpress.stor.sinaapp.com/hbase/book.html?q=/wp-content/hbase/book.html
//Hadoop Shell命令
http://hadoop.apache.org/docs/r1.0.4/cn/hdfs_shell.html

Spring框架参考文档 翻译
文档地址
中文文档:http://spring.oschina.mopaas.com/
https://github.com/waylau/spring-framework-4-reference/blob/master/SUMMARY.md
http://waylau.gitbooks.io/spring-framework-4-reference/content/index.html
英文文档:http://spring.oschina.mopaas.com/html_en/
http://docs.spring.io/spring/docs/4.2.0.BUILD-SNAPSHOT/spring-framework-reference/htmlsingle/#overview-maven-bom
//spring hadoop
http://docs.spring.io/spring-hadoop/docs/current/reference/html/
//Spring Boot
http://afoo.me/posts/2015-07-09-how-spring-boot-works.html



//JAVA学习框架 和 前端技术
http://www.ideagrace.com/sf/containers/  
//Amdatu是一组开源组件和工具在Java构建模块化应用程序。
http://amdatu.org/
https://github.com/waylau/netty-4-user-guide/blob/master/SUMMARY.md//netty-4-user-guide
//jquery 插件库
http://www.jq22.com/
http://www.pintuer.com/  //pintuer
//前端开发利器 - Emmet 
http://www.gbtags.com/gb/gbliblist/3.htm

//apiCloud
http://www.apicloud.com/
http://docs.apicloud.com/APICloud/videos-and-codes
//AUI for apiCloud
http://www.kancloud.cn/liulangnan/aui


//翻墙
https://hosts.huhamhire.com/
http://ssnode.com/

https://www.zybuluo.com/mdeditor//md 编辑器在线
https://stackedit.io/editor


//工具 博客类
http://www.taobaotest.com/ //淘宝test
http://geewu.gitbooks.io/rabbitmq-quick/content/index.html//rabbitMQ 快速上手文档

http://www.java2s.com/Open-Source/Java_Free_Code/index.htm //Java Free Code


//百度云
16套游戏开发+项目实战链接: http://pan.baidu.com/s/1sjA146L 密码: akpp
IOS12月最新就业班链接: http://pan.baidu.com/s/1hqepfbm 密码: bxe9
IOS5期链接: http://pan.baidu.com/s/1mgiMepi 密码: farg
IOS4期链接: http://pan.baidu.com/s/1qWC4FJe 密码: zjs7

黑马7天hadoop链接: http://pan.baidu.com/s/1pJKD48b 密码: x7n3


//UI
http://my.chinaz.com/accounts/login.html//站长之家
http://www.sitestar.cn/default.aspx//建站之星

//运维博客
http://azhuang.blog.51cto.com/ //状大神

//小甲鱼bbs python
http://bbs.fishc.com/

//nginx 学习
http://openresty.org/download/agentzh-nginx-tutorials-zhcn.html
//开源的网站访问统计系统
http://www.piwik.cn/
linux rabbitmq高可靠集群配置 java
linux 安装rabbitmq java
//linux 安装rabbitmq
//  http://www.rabbitmq.com/releases/rabbitmq-server/ 下载mq地址

//****************首先需要安装mq运行环境erlang******************************
//可参照:http://amornio.iteye.com/blog/1551502
//1:下载erlang安装包 和  依赖
wget http://www.erlang.org/download/otp_src_R15B01.tar.gz

//2解压:
tar -zxvf otp_src_R16B03-1.tar.gz
//3编译安装:
/configure --prefix=/usr/local/servers/erlang

如果本步骤出现
error: no acceptable C compiler found in $PATH
说明你没有安装gcc编译器,去安装gcc编译器
//1,
yum -y install gcc

//然后在执行:配置安装环境
/configure --prefix=/usr/local/install_file/erlang

错误:
configure: error: Perl is required to generate v2 to v1 mib converter script
configure: error: /bin/sh '/usr/local/install_package/rabbitmq/otp_src_17.4b/snmp/./configure' failed for snmp/.
configure: error: /bin/sh '/usr/local/install_package/rabbitmq/otp_src_17.4b/configure' failed for lib


解决:
yum -y install perl


错误:
configure: error: No curses library functions found
configure: error: /bin/sh '/usr/local/install_package/rabbitmq/otp_src_17.4/erts/configure' failed for erts

解决:
yum -y install ncurses-devel

执行编译命令:make
执行安装:make install

//环境变量
ERL_HOME=/usr/local/install_file/erlang
PATH=$ERL_HOME/bin:$PATH
export ERL_HOME PATH


//****************安装mq*****************************
// 依赖包xmlto
yum install xmlto
//参考 http://blog.csdn.net/sonnet123/article/details/9188429

wget http://www.rabbitmq.com/releases/rabbitmq-server/v3.4.3/rabbitmq-server-3.4.3-1.noarch.rpm  
//不同版本自己可以修改下就可以了

rpm -ivh  --nodeps  rabbitmq-server-3.4.3-1.noarch.rpm
//这样就安装成功了

//使用 -detached 参数运行各节点

rabbitmqctl stop
rabbitmq-server -detached

//启动web监控功能
rabbitmq-plugins enable rabbitmq_management  

//重启MQ

//访问 IP:15672
//登录如果要是用默认的guest  (远程不能使用需要设置)

//修改安装目录下面ebin下的rabbit.app文件  {loopback_users,[<<guest>>]} 吧guest去了 重启MQ就可以了
一些好用工具 及其 开源框架 java
//******************************************项目管理***************************************
653363623
Redmine
JIRA
todolist
project(适合小团队)
xmind freemind mindmanager(思维导图软件)
Trac(适合小团队)
禅道(bug管理)

//***************************************运维、监控类*******************************************
Hyperic HQ//监控
zabbix//监控
Nagios//是一款开源的免费网络监视工具
Keepalived//Keepalived的作用是检测web服务器的状态
drbd+heartbeat//
squid  //前端缓存框架

//******************************************工具类***************************************
teamcCity//持续集成工具
upsource//svn 代码仓库浏览器和代码审查工具
SonarQube//代码质量管理平台

gitblit//git web管理工具
SmartGit//git 版本控制管理工具

//************************************报表*******************************************
//前端
http://www.hcharts.cn/index.php //Highcharts
functioncharts //不开源 有收费 支持一些不收费

//****************************************分布式架构***********************************************
snappy//google公司内部广泛使用的一种压缩技术 google开源
hessian//一种更加高效的序列化和反序列化技术

//****************************************大数据架构***********************************************
Cloudera Manager
CDH5
Ansible
//CDH5的Ansible配置
https://github.com/mcsrainbow/ansible-playbooks-cdh5

//hadoop2.x项目组相关
HDFS MapReduce yarn Hive Pig Mathout Hbase Zookeeper Sqoop Flume Oozie impala hue Sentry 

//hbase tool
apache phoenix drill

//Hue 配置
http://gethue.com/how-to-configure-hue-in-your-hadoop-cluster/
http://cloudera.github.io/hue/docs-3.6.0/manual.html#_the_hue_database

//cdh下载
http://archive.cloudera.com/cm5/installer/
http://archive.cloudera.com/cm5/redhat/6/x86_64/cm/

//hadoop安装部署 工具
//开源的
HDP,
CDH // http://archive.cloudera.com/cdh5/cdh/5/
Apche Knox Gateway //hadoop安全
apache accumulo


//******************************************框架类***************************************
Apache Avro 与 Thrift //基于二进制的高性能的通讯中间件. 它们都提供了数据序列化的功能和RPC服务
rabbitmq //分布式系统消息中间件
Disruptor//是一个高性能的异步处理框架,或者可以认为是最快的消息框架(轻量的JMS)
Kafka//分布式消息队列
CuratorFramework //一个队zookeeper封装client与server通信框架
Mule//是一个企业服务总线(ESB)消息框架.它的主要特性包括:

Cobar介绍及配置//alibaba mysql集群工具
TProfiler//alibaba  TProfiler是一个可以在生产环境长期使用的性能分析工具
Akka //编写高并发框架
Disruptor//
Jactors//

//***********************************好用的第三方jar***************************************
//时间插件
joda-time

//***********************************JAVA 并发***************************************
JActor  //Actor模式的Java实现 
Kilim //是一个Java的actor框架

//***********************************加密算法***************************************
MD5/SHA1/SHA256,或者MD5withRSA、SHA1withRSA、SHA256withRSA


//***********************************IM***************************************
Tigase XMPP

Comet4J
mysql 根据当前坐标 范围计算附近 java
SELECT
	t.id,
	t.store_name,
	t.logo_url,
	t.store_address,
	t.store_phone,
	t.x_point AS lon,
	t.y_point AS lat,
	sqrt(((
				(104.071127- t.x_point) * PI() * 12656 * cos(
					((30.577438 + t.y_point) / 2) * PI() / 180
				) / 180
			) * (
				(104.071127 - t.x_point) * PI() * 12656 * cos(
					((30.577438 + t.y_point) / 2) * PI() / 180
				) / 180
			)
		) + (
			(
				(30.577438 - t.y_point) * PI() * 12656 / 180
			) * (
				(30.577438 - t.y_point) * PI() * 12656 / 180
			)
		)
	) AS distance
FROM
	t_store AS t
GROUP BY distance 
HAVING distance <= 3
ORDER BY distance ASC 
LIMIT 20




public List<Map<String, Object>> getNearStore(String lon, String lat, String scope,Integer count) {
		ArrayList<Object> params = Lists.newArrayList();
		StringBuffer sql = new StringBuffer();
//		sql.append(" select t.id,t.store_name,t.logo_url,t.store_address,t.store_phone,t.x_point AS lon,t.y_point AS lat, ");
//		sql.append(" (POWER(MOD (ABS(t.x_point - " + lon + "), 360),2) +");
//		sql.append(" POWER(ABS(t.y_point - " + lat + "), 2");
//		sql.append(" )) as distance");
//		sql.append(" from t_store as t");
//		sql.append(" GROUP BY distance HAVING distance <= " + scope + "");
//		sql.append(" ORDER BY distance ASC LIMIT " + count);
		sql.append("SELECT");
		sql.append(" t.id,t.store_name,t.logo_url,t.store_address,t.store_phone,");
		sql.append(" t.x_point AS lon,t.y_point AS lat,");
		sql.append(" sqrt( ");
		sql.append(" (");
		sql.append(" ( ("+lon+" - t.x_point) * PI() * 12656 * cos(");
		sql.append(" ( ("+lat+" + t.y_point) / 2) * PI() / 180");
		sql.append(" ) / 180 )");
		sql.append(" *");
		sql.append(" (("+lon+" - t.x_point) * PI() * 12656 * cos(");
		sql.append(" (("+lat+" + t.y_point) / 2) * PI() / 180");
		sql.append(" ) / 180)");
		sql.append(" )");
		sql.append(" + ");
		sql.append(" (");
		sql.append(" (("+lat+" - t.y_point) * PI() * 12656 / 180 ) ");
		sql.append(" *");
		sql.append(" (("+lat+" - t.y_point) * PI() * 12656 / 180 )");
		sql.append(" )");
		sql.append(" ) AS distance");
		sql.append(" FROM");
		sql.append(" t_store AS t");
		sql.append(" GROUP BY distance ");
		sql.append(" HAVING distance <= "+scope+"");
		sql.append(" ORDER BY distance ASC ");
		sql.append(" LIMIT "+count+"");
		LogUtils.logInfo("查询附近店铺SQL:" + sql.toString());
		return findByJDBCSql(sql.toString(), params);
	}
SVN 账号 权限分配 java
### This file is an example authorization file for svnserve.
### Its format is identical to that of mod_authz_svn authorization
### files.
### As shown below each section defines authorizations for the path and
### (optional) repository specified by the section name.
### The authorizations follow. An authorization line can refer to:
###  - a single user,
###  - a group of users defined in a special [groups] section,
###  - an alias defined in a special [aliases] section,
###  - all authenticated users, using the '$authenticated' token,
###  - only anonymous users, using the '$anonymous' token,
###  - anyone, using the '*' wildcard.
###
### A match can be inverted by prefixing the rule with '~'. Rules can
### grant read ('r') access, read-write ('rw') access, or no access
### ('').

[aliases]

[groups]
admin_worker = sung,caogw,yangt,xuqs,jinx
android_worker = yangck,zhouq
ios_worker = lim,yuch
design_worker = hetx

#SVN根目录的权限
[/]
@android_worker = rw
@admin_worker = rw
@ios_worker = rw
@design_worker = rw
xtt = rw
* = r

[tiger:/]
@android_worker = rw
@admin_worker = rw
@ios_worker = rw
@design_worker = rw
xtt = rw
* = r

[tiger:/web]
@admin_worker = rw
* = 
[tiger:/web/code]
@admin_worker = rw
* = 

[tiger:/web/store]
@admin_worker = rw
xtt = rw
* = 

[tiger:/android/code]
@android_worker = rw
@admin_worker = rw
* = 

[tiger:/ios/code]
@ios_worker = rw
@admin_worker = rw
* = 

[tiger:/design]
@admin_worker = rw
@android_worker = rw
@ios_worker = rw
@design_worker = rw
* = r

[tiger:/doc]
@admin_worker = rw
@android_worker = rw
@ios_worker = rw
@design_worker = rw
* = r

[tiger:/temp]
* = rw

[tiger:/sport]
@admin_worker = rw
@android_worker = rw
@ios_worker = rw
@design_worker = rw
* = r
java logback手动加载配置文件 java
public static void main(String[] args) {
		LogUtils.logInfo("start dbMidddleware project...");
		try {
			LogBackConfigLoader.load("conf/logback.xml");
		} catch (Exception e) {
			e.printStackTrace();
		}
}




package com.gukq.dbMidddleware;

import java.io.File;
import java.io.IOException;

import org.slf4j.LoggerFactory;

import ch.qos.logback.classic.LoggerContext;
import ch.qos.logback.classic.joran.JoranConfigurator;
import ch.qos.logback.core.joran.spi.JoranException;
import ch.qos.logback.core.util.StatusPrinter;

public class LogBackConfigLoader {
	public static void load(String externalConfigFileLocation)
			throws IOException, JoranException {
		LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory();

		File externalConfigFile = new File(externalConfigFileLocation);
		if (!externalConfigFile.exists()) {
			throw new IOException(
					"Logback External Config File Parameter does not reference a file that exists");
		} else {
			if (!externalConfigFile.isFile()) {
				throw new IOException(
						"Logback External Config File Parameter exists, but does not reference a file");
			} else {
				if (!externalConfigFile.canRead()) {
					throw new IOException(
							"Logback External Config File exists and is a file, but cannot be read.");
				} else {
					JoranConfigurator configurator = new JoranConfigurator();
					configurator.setContext(lc);
					lc.reset();
					configurator.doConfigure(externalConfigFileLocation);
					StatusPrinter.printInCaseOfErrorsOrWarnings(lc);
				}
			}
		}
	}
}
使用构造器来代替参数比较多的构造方法 java
package effective.study1.constructor.build;

public class Person {
	
	private final String name;
	private final int age;
	private final int sex;
	private final String iphone;
	private final String address;
	
	
	public Person(Builder builder) {
		this.name = builder.name;
		this.age = builder.age;
		this.sex = builder.sex;
		this.iphone = builder.iphone;
		this.address = builder.address;
	}




	public static class Builder{
		private final String name;
		private final int age;
		private final int sex;

		//default
		private String iphone = "13076061657";
		private String address = "成都市";
		
		public Builder(String name,int age,int sex){
			this.name = name;
			this.age = age;
			this.sex = sex;
		}
		
		public Builder iphone(String val){
			iphone = val;
			return this;
		}
		public Builder address(String val){
			address = val;
			return this;
		}
		
		public Person build(){
			return new Person(this);
		}
	}
	
	
	public String getName() {
		return name;
	}
	public int getAge() {
		return age;
	}
	public int getSex() {
		return sex;
	}
	public String getIphone() {
		return iphone;
	}
	public String getAddress() {
		return address;
	}
	@Override
	public String toString() {
		return "Person [name=" + name + ", age=" + age + ", sex=" + sex
				+ ", iphone=" + iphone + ", address=" + address + "]";
	}
}




//使用
package effective.study1.constructor.build;

import effective.study1.constructor.build.Person.Builder;

public class Main {
	
	public static void main(String[] args) {
		Person p = new Person.Builder("孙刚",22,1).iphone("188888888888").build();
		System.out.println(p.toString());
	}
}



//=========================第二种方式=====================================
package effective.study1.constructor.build;

public interface AttributeBuilder<T> {
	
	T build();
}


//=========================实现不同bean的 builder=========================
package effective.study1.constructor.build;

public class PersonBuilder implements AttributeBuilder<Person>{
	
	public final String name;
	public final int age;
	public final int sex;

	//default
	public String iphone = "13076061657";
	public String address = "成都市";
	
	public PersonBuilder(String name,int age,int sex){
		this.name = name;
		this.age = age;
		this.sex = sex;
	}
	
	public PersonBuilder iphone(String val){
		iphone = val;
		return this;
	}
	public PersonBuilder address(String val){
		address = val;
		return this;
	}
	
	@Override
	public Person build() {
		return new Person(this);
	}
}


//TEST
package effective.study1.constructor.build;


public class Main {
	
	public static void main(String[] args) {
		Person p = new PersonBuilder("孙刚", 22, 1).iphone("1888888888").build();
		System.out.println(p.toString());
	}
}
java处理时间 java
//开始时间
private String startTime;
//结束时间
private String endTime;


/**
	 * 处理时间
	 * @throws ParseException
	 */
	private void processTime() {
		String sTime = null;
		String eTime = null;
		if (null != energyDataRecord.getDataFormatType()) {
			String dataFormatType = energyDataRecord.getDataFormatType();
			
			//小时
			if ("HH".equals(dataFormatType)) {
				sTime = this.startTime+ ":00:00";
				eTime = this.endTime+ ":59:59";
			}
			//天
			if ("DD".equals(dataFormatType)) {
				sTime = this.startTime + " 00:00:00";
				eTime = this.endTime + " 23:59:59";
			}
			//月
			if ("MM".equals(dataFormatType)) {
				sTime = this.startTime + "-01 00:00:00";
				String[] dateStrs = this.endTime.split("-");
				int month = Integer.parseInt(dateStrs[1]);
				if(month == 12){//处理12月
					eTime = endTime + "-31 23:59:59";
				}else{
					//结束时间设置为下个月的1号零点零分
					eTime = dateStrs[0] + "-" + (month + 1) + "-01 00:00:00";
				}
			}
			//年
			if ("YY".equals(dataFormatType)) {
				sTime = startTime + "-01-01 00:00:00";
				eTime = endTime + "-12-31 23:59:59";
			}
		}
		if (null != sTime && null != eTime) {
			try {
				this.energyDataRecord.setStartDate(DataUtil.SDF_DATE_DETAIL_TIME.parse(sTime));
				this.energyDataRecord.setEndDate(DataUtil.SDF_DATE_DETAIL_TIME.parse(eTime));
			} catch (ParseException e) {
				e.printStackTrace();
			}
		}
}




/**
	 * 日期格式:yyyy-MM-dd HH:mm:ss
	 */
	public static final SimpleDateFormat SDF_DATE_DETAIL_TIME = new SimpleDateFormat( "yyyy-MM-dd H:m:s");
通过Spring 拦截器实现 获取 request的 contentPath 和 当前路径、BackPath java

public interface Constants {

    /****/
    String CONTEXT_PATH = "ctx";

    /**
     * 当前请求的地址 带参数
     */
    String CURRENT_URL = "currentURL";


    /**
     * 当前请求的地址 不带参数
     */
    String NO_QUERYSTRING_CURRENT_URL = "noQueryStringCurrentURL";

    /**
     * 上个页面地址
     */
    String BACK_URL = "BackURL";

}


//8*******************Spring  拦截器类*************************
package com.sishuok.es.common.web.interceptor;

import com.sishuok.es.common.Constants;
import org.springframework.util.AntPathMatcher;
import org.springframework.util.PathMatcher;
import org.springframework.util.StringUtils;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * 设置通用数据的Interceptor
 * <p/>
 * 使用Filter时 文件上传时 getParameter时为null 所以改成Interceptor
 * <p/>
 * 1、ctx---->request.contextPath
 * 2、currentURL---->当前地址
 * <p>User: Zhang Kaitao
 * <p>Date: 13-1-22 下午4:35
 * <p>Version: 1.0
 */
public class SetCommonDataInterceptor extends HandlerInterceptorAdapter {

    private final PathMatcher pathMatcher = new AntPathMatcher();

    private static final String[] DEFAULT_EXCLUDE_PARAMETER_PATTERN = new String[]{
            "\\&\\w*page.pn=\\d+",
            "\\?\\w*page.pn=\\d+",
            "\\&\\w*page.size=\\d+"
    };

    private String[] excludeParameterPatterns = DEFAULT_EXCLUDE_PARAMETER_PATTERN;
    private String[] excludeUrlPatterns = null;

    public void setExcludeParameterPatterns(String[] excludeParameterPatterns) {
        this.excludeParameterPatterns = excludeParameterPatterns;
    }

    public void setExcludeUrlPatterns(final String[] excludeUrlPatterns) {
        this.excludeUrlPatterns = excludeUrlPatterns;
    }

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {

        if(isExclude(request)) {
            return true;
        }

        if (request.getAttribute(Constants.CONTEXT_PATH) == null) {
            request.setAttribute(Constants.CONTEXT_PATH, request.getContextPath());
        }
        if (request.getAttribute(Constants.CURRENT_URL) == null) {
            request.setAttribute(Constants.CURRENT_URL, extractCurrentURL(request, true));
        }
        if (request.getAttribute(Constants.NO_QUERYSTRING_CURRENT_URL) == null) {
            request.setAttribute(Constants.NO_QUERYSTRING_CURRENT_URL, extractCurrentURL(request, false));
        }
        if (request.getAttribute(Constants.BACK_URL) == null) {
            request.setAttribute(Constants.BACK_URL, extractBackURL(request));
        }

        return true;
    }

    private boolean isExclude(final HttpServletRequest request) {
        if(excludeUrlPatterns == null) {
            return false;
        }
        for(String pattern : excludeUrlPatterns) {
            if(pathMatcher.match(pattern, request.getServletPath())) {
                return true;
            }
        }
        return false;
    }


    private String extractCurrentURL(HttpServletRequest request, boolean needQueryString) {
        String url = request.getRequestURI();
        String queryString = request.getQueryString();
        if (!StringUtils.isEmpty(queryString)) {
            queryString = "?" + queryString;
            for (String pattern : excludeParameterPatterns) {
                queryString = queryString.replaceAll(pattern, "");
            }
            if (queryString.startsWith("&")) {
                queryString = "?" + queryString.substring(1);
            }
        }
        if (!StringUtils.isEmpty(queryString) && needQueryString) {
            url = url + queryString;
        }
        return getBasePath(request) + url;
    }

    /**
     * 上一次请求的地址
     * 1、先从request.parameter中查找BackURL
     * 2、获取header中的 referer
     *
     * @param request
     * @return
     */
    private String extractBackURL(HttpServletRequest request) {
        String url = request.getParameter(Constants.BACK_URL);

        //使用Filter时 文件上传时 getParameter时为null 所以改成Interceptor

        if (StringUtils.isEmpty(url)) {
            url = request.getHeader("Referer");
        }

        if(!StringUtils.isEmpty(url) && (url.startsWith("http://") || url.startsWith("https://"))) {
            return url;
        }

        if (!StringUtils.isEmpty(url) && url.startsWith(request.getContextPath())) {
            url = getBasePath(request) + url;
        }
        return url;
    }

    private String getBasePath(HttpServletRequest req) {
        StringBuffer baseUrl = new StringBuffer();
        String scheme = req.getScheme();
        int port = req.getServerPort();

        //String		servletPath = req.getServletPath ();
        //String		pathInfo = req.getPathInfo ();

        baseUrl.append(scheme);        // http, https
        baseUrl.append("://");
        baseUrl.append(req.getServerName());
        if ((scheme.equals("http") && port != 80) || (scheme.equals("https") && port != 443)) {
            baseUrl.append(':');
            baseUrl.append(req.getServerPort());
        }
        return baseUrl.toString();
    }
}


//****************Spring 拦截配置******************
 <!-- 拦截器设置 -->
    <mvc:interceptors>
        <bean class="org.springframework.web.servlet.handler.ConversionServiceExposingInterceptor">
            <constructor-arg ref="conversionService"/>
        </bean>
        <bean class="com.sishuok.es.common.web.interceptor.SetCommonDataInterceptor">
            <property name="excludeUrlPatterns">
                <value>/admin/polling </value>
            </property>
        </bean>
        <mvc:interceptor>
            <mvc:mapping path="/admin/**" />
            <mvc:mapping path="/office/**" />
            <mvc:exclude-mapping path="/admin/polling"/>
            <bean class="org.springframework.orm.jpa.support.OpenEntityManagerInViewInterceptor"/>
        </mvc:interceptor>
        <!--<mvc:interceptor>-->
        <!--<mvc:mapping path="/**"/>-->
        <!--<bean class="cn.javass.test.interceptor.TestInterceptor"/>-->
        <!--</mvc:interceptor>-->
    </mvc:interceptors>


//*******************页面使用******************

//直接可以:

${ctx}
${currentURL}
将区域一些数据加载到内存中 java
public class LoadAreaServlet extends HttpServlet{
	
	
	/**
	*/
	private static final long serialVersionUID = 1457805673123717992L;

	@Override
	public void init() throws ServletException {
		//初始化  区域数据
		CitySection.CITY_SECTION.init();
	}
}




//=====================================================


package com.supinfo.util;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.opensymphony.xwork2.ActionContext;
import com.supinfo.jieneng.domains.Area;
import com.supinfo.jieneng.domains.City;
import com.supinfo.jieneng.domains.County;
import com.supinfo.jieneng.services.AreaService;


public class CitySection {
	public static ApplicationContext CONTEXT = new ClassPathXmlApplicationContext(
			new String[] { "applicationContext-mybatis.xml",
					"applicationContext-services.xml" });
	
	private static AreaService areaService = CONTEXT.getBean("areaService",AreaService.class);
	
	public static final String DEFAULT_CITY_NAME = "成都";//默认城市名
	
	
	public static final CitySection CITY_SECTION = new CitySection(); 
	
	/**
	 * key:城市名,value:区域集合
	 */
	private static final Map<String, List<String>> CITY_SECTION_MAP = new HashMap<String, List<String>>();
	
	/**
	 * key:省名,value:城市Map集合
	 * 城市Map集合的key:城市名,value:区域集合
	 */
	public static final Map<String, Map<String, List<Area>>> PROVINCE_CITY_SECTION_MAP = new HashMap<String, Map<String, List<Area>>>();
	
	/**
	 * 获取所有城市名
	 * 
	 * @return
	 */
	public static List<City> findAllAreaName() {
		
		//存储城市
		List<City> cityList = new ArrayList<City>();
		//存储区域
		List<County> countyList = new ArrayList<County>();
		
		try {
			//获取所有省份
			List<Area> provinces = areaService.getAreaByPID(0l);
			if(DataUtil.checkListNullAndSize(provinces)){
				for (Area areaProvince : provinces) {
					//根据省份ID获取  所属省份下的城市
					List<Area> citys = areaService.getAreaByPID(areaProvince.getId());
					if (DataUtil.checkListNullAndSize(citys)) {
						for (Area areaCity : citys) {
							City  city = new City();
							city.setId(areaCity.getId());
							city.setTie(areaCity.getAreaName());
							city.setCode(areaCity.getCode());
							
							//根据城市ID 获取所属城市下的区县
							List<Area> countys = areaService.getAreaByPID(areaCity.getId());
							if (DataUtil.checkListNullAndSize(countys)) {
								for (Area areaCounty : countys) {
									County county = new County();
									county.setId(areaCounty.getId());
									county.setTie(areaCounty.getAreaName());
									county.setCode(areaCounty.getCode());
									
									countyList.add(county);
									
									city.setCouns(countyList);
								}
							}
							
							cityList.add(city);
						}
					}
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		return cityList;
	}
	
	/**
	 * 根据城市名获取其ID
	 * @author 
	 * @return
	 */
	public static Long findCityIdByName(String cityName) {
		
		Long cityId = null;//待查找城市的ID
		try {
			// 查询所有的省份
			List<Area> provinces = areaService.getAreaByPID(0L);
			if (DataUtil.checkListNullAndSize(provinces)) {
				for (Area areaProvince : provinces) {
					//获取城市
					List<Area> citys = areaService.getAreaByPID(areaProvince.getId());
					if (DataUtil.checkListNullAndSize(citys)) {
						for (Area areaCity : citys) {
							if (null != cityName && cityName.equals(areaCity.getAreaName())) {
								return areaCity.getId();
							}
							
							//找默认城市的ID
							if(cityId == null && DEFAULT_CITY_NAME.equals(areaCity.getAreaName())){
								
								cityId = areaCity.getId();//设置默认城市ID
							}
						}
					}
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		return cityId;
	}
	

	/**
	 * 获取某城市下的所有区域
	 * 
	 * @param cityName
	 * @return
	 */
	public static List<String> findSectionInCity(String cityName) {
		List<String> re = new ArrayList<String>();
			try {
				if (null != cityName) {
					List<Area> citys = areaService.getAreaByName(cityName);
					if (DataUtil.checkListNullAndSize(citys)) {
						List<Area> areas = areaService.getAreaByPID(citys.get(0).getId());
						if (DataUtil.checkListNullAndSize(areas)) {
							for (Area area : areas) {
								re.add(area.getAreaName());
							}
						}
					}
				}
			} catch (Exception e) {
				e.printStackTrace();
			}
			return re;
	}
	
	/**
	 * 根据城市对象、获取某城市下的所有区域
	 * 
	 * @param cityName
	 * @return
	 */
	public static List<Area> findSectionInCity(Area area) {
		if (null != area) {
			try {
				return areaService.getAreaByPID(area.getId());
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		return null;
	}
	
	
	/**
	 * 根据省份名获取省份对象
	 * @param provName
	 * @return
	 */
	public static Area findProvinceByProvName(String provName){
		if (provName != null) {
			try {
				List<Area> areas = areaService.getAreaByName(provName);
				if (DataUtil.checkListNullAndSize(areas)) {
					for (Area area : areas) {
						if (area.getPid() == 0) {
							return area;
						}
					}
				}
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		return null;
	}
	
	/**
	 * 根据省份对象、城市名获取城市对象
	 * @return
	 */
	public static Area findCityByProvAndCityName(Area provObj, String cityName){
		if (null != cityName) {
			try {
				List<Area> areas = areaService.getAreaByName(cityName);
				if (DataUtil.checkListNullAndSize(areas)) {
					for (Area area : areas) {
						if (null != provObj) {
							if (area.getPid() == provObj.getId() ) {
								return area;
							}
						}
					}
				}
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		return null;
	}
	

	/**
	 * 通过区域名获取区域id
	 * 
	 * @param sname
	 * @return
	 */
	public static Long findSectionIdByName(String cityName, String sname) {
		if (null != cityName) {
			try {
				List<Area> areas = areaService.getAreaByName(cityName);
				if (DataUtil.checkListNullAndSize(areas)) {
					for (Area area : areas) {
						List<Area> citys = areaService.getAreaByPID(area.getId());
						if (DataUtil.checkListNullAndSize(citys)) {
							for (Area area2 : citys) {
								if (null != sname) {
									if (sname.equals(area2.getAreaName())) {
										return area2.getId();
									}
								}
							}
						}
					}
				}
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		return null;
	}
	
	/**
	 * 通过城市id获取城市名
	 * 
	 * @param id
	 * @return
	 */
	public static String findCityNameById(Long cityid) {
		if (cityid != null) {
			try {
				return areaService.findObjectById(cityid).getAreaName();
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		return null;
	}
	
	
	
	/**
	 * 通过城市名获取区域集合
	 * 
	 * @param cityName
	 * @return
	 */
	public List<String> get(String cityName) {
		
		initCitySectionMap();
		
		return CITY_SECTION_MAP.get(cityName);
	}
	
	/**
	 * 获取城市名集合
	 * 
	 * @return
	 */
	public void init() {

		initCitySectionMap();

		//return PROVINCE_CITY_SECTION_MAP;
	}
	
	
	
	/**
	 * 为PROVINCE_CITY_SECTION_MAP集合设置值
	 */
	private static void initCitySectionMap() {
		if(PROVINCE_CITY_SECTION_MAP.size() > 0){
			
			PROVINCE_CITY_SECTION_MAP.clear();
		}
		
		try {
			//获取所有省份
			List<Area> provinces = areaService.getAreaByPID(0l);
			if (DataUtil.checkListNullAndSize(provinces)) {
				for (Area areaProvince : provinces) {
					//根据省份ID获取  所属省份下的城市
					List<Area> citys = areaService.getAreaByPID(areaProvince.getId());
					//创建城市、区域集合
					Map<String, List<Area>> citySectionMap = new HashMap<String, List<Area>>();
					if (DataUtil.checkListNullAndSize(citys)) {
						for (Area areaCity : citys) {
							String cityName = areaCity.getAreaName();
							//根据城市ID 获取所属城市下的区县
							List<Area> countys = areaService.getAreaByPID(areaCity.getId());
							// 将城市名(键)与区域集合(值)加入map
							citySectionMap.put(cityName, countys);
						}
					}
					// 将省份名(键)与城市区域集合(值)加入map
					PROVINCE_CITY_SECTION_MAP.put(areaProvince.getAreaName(), citySectionMap);
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	/**
	 * 获取当前选中城市如果没有则取默认城市
	 * @return
	 */
	public static String getCurrentCity(){
		
		String city  = (String)ActionContext.getContext().getSession().get("city");
		
		if(DataUtil.isNotNullAndEmpty(city)){
			return city;
		}
		
		return DEFAULT_CITY_NAME;
	}
	
	
	public static Map<String, Map<String, List<Area>>> getAreaDataMap(){
		if (null != PROVINCE_CITY_SECTION_MAP && PROVINCE_CITY_SECTION_MAP.size() > 0) {
			return PROVINCE_CITY_SECTION_MAP;
		}
		
		CitySection.CITY_SECTION.initSecond();
		
		return PROVINCE_CITY_SECTION_MAP;
	}
	/**
	 * 
	* 描述  : 第二次初始化
	* 方法名: initSecond
	* 创建人:孙刚   
	* 创建时间:2014-2-24 下午05:01:56  
	* @return :void
	 */
	private Map<String, Map<String, List<Area>>> initSecond() {

		initCitySectionMap();

		return PROVINCE_CITY_SECTION_MAP;
	}
}

//=======================

package com.supinfo.jieneng.domains;

import java.io.Serializable;

import com.supinfo.core.base.BaseDomain;
/**
* @Description:TODO(行政区域实体) 
* 项目名称:jnschool   
* 类名称:Area   
* 创建人:孙刚   
* 创建时间:2013-12-9 上午09:24:00   
* 修改人1:xxx     
* 修改时间1:xxxx-xx-xx 
* 修改备注:   
* @version  1.0
 */
@SuppressWarnings("serial")
public class Area extends BaseDomain implements Serializable {
	/**
	 * 区域名称
	 */
    private String areaName;
    /**
     * pid
     */
    private Long pid;
    /**
     * 区域编号
     */
    private String code;


    public String getAreaName() {
		return areaName;
	}

	public void setAreaName(String areaName) {
		this.areaName = areaName;
	}

	public Long getPid() {
        return pid;
    }

    public void setPid(Long pid) {
        this.pid = pid;
    }

    public String getCode() {
        return code;
    }

    public void setCode(String code) {
        this.code = code;
    }
}


//=====================================
package com.supinfo.jieneng.domains;

import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamAsAttribute;

/**
 * 区域
 * @author 
 *
 */
@XStreamAlias("coun")
public class County {
	
	@XStreamAsAttribute
    @XStreamAlias("id")
	private Long id;
	
	@XStreamAsAttribute
    @XStreamAlias("tie")
	private String tie;
	
	@XStreamAsAttribute
    @XStreamAlias("code")
	private String code;
	
	public Long getId() {
		return id;
	}

	public void setId(Long id) {
		this.id = id;
	}

	public String getTie() {
		return tie;
	}

	public void setTie(String tie) {
		this.tie = tie;
	}

	public String getCode() {
		return code;
	}

	public void setCode(String code) {
		this.code = code;
	}
	
	
	
}
//================================
package com.supinfo.jieneng.domains;

import java.util.List;

import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
import com.thoughtworks.xstream.annotations.XStreamImplicit;

@XStreamAlias("city")
public class City {

	@XStreamAsAttribute
    @XStreamAlias("id")
	private Long id;
	
	@XStreamAsAttribute
    @XStreamAlias("tie")
	private String tie;
	@XStreamAsAttribute
    @XStreamAlias("code")
	private String code;
	
	@XStreamImplicit
	private List<County> couns;
	
	public Long getId() {
		return id;
	}

	public void setId(Long id) {
		this.id = id;
	}

	public String getTie() {
		return tie;
	}

	public void setTie(String tie) {
		this.tie = tie;
	}

	public List<County> getCouns() {
		return couns;
	}

	public void setCouns(List<County> couns) {
		this.couns = couns;
	}

	public String getCode() {
		return code;
	}

	public void setCode(String code) {
		this.code = code;
	}
	
}


自定义JAVA 动态代理实现 java
http://my.oschina.net/feichexia/blog/201907


//======================InvocationHandler =======================

package org.sung.java.custom.dynamicProxy;

import java.lang.reflect.Method;

public interface InvocationHandler {
	
	public Object invoke(Object proxy, Method method, Object[] args) throws Throwable;
	
}


//======================Proxy =======================

package org.sung.java.custom.dynamicProxy;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Serializable;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLClassLoader;
import java.util.Collections;
import java.util.Iterator;
import java.util.Map;
import java.util.WeakHashMap;

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

public class Proxy implements Serializable {
	
	private final static Class[] constructorParams = { InvocationHandler.class };
	private static Map<Class<?>, Void> proxyClasses = Collections.synchronizedMap(new WeakHashMap<Class<?>, Void>());
	
	public static Object newProxyInstance(ClassLoader loader, Class<?> inface,
			InvocationHandler handler) throws IllegalArgumentException {

		if (null == handler) {
			throw new NullPointerException("handler is not null...");
		}
		// 获取代理对象
		Class<?> $proxyClass = getProxyClass(inface, loader);
		try {
			final Constructor<?> cons = $proxyClass.getConstructor(constructorParams);
			final InvocationHandler ih = handler;
			return newInstance(cons, ih);
		} catch (NoSuchMethodException e) {
			e.printStackTrace();
		} catch (SecurityException e) {
			e.printStackTrace();
		}
		return null;

	}

	private static Class<?> getProxyClass(Class<?> inface, ClassLoader loader) {
		String methodStr = "";
		String rt = "\r\n";
		// 过去接口中 所有的方法
		Method[] methods = inface.getMethods();
		// 判断接口中 是否有方法
		if (null != methods) {
			// 遍历所有方法
			for (Method method : methods) {
				// 获取方法所有的的参数类型
				Class<?>[] paramTypes = method.getParameterTypes();
				// 获取方法的返回类型
				Class<?> returnType = method.getReturnType();
				methodStr += "	public " + returnType.getSimpleName() + " " + method.getName();
				// 判断参数类型
				if (paramTypes.length > 0) {
					//保存临时参数
					String tempParamNames = "";
					//保存临时的参数类型
					String tempParamTypes = "";
					String tempparamName ="";
					// 遍历 参数类型
					for (int i = 0; i < paramTypes.length; i++) {
						// 获取参数类型名
						String paramTypeSimpleName = paramTypes[i].getSimpleName();
						// 制定一个 参数名 
						String paramName = "param"+(i+1);
						tempparamName += paramName + ",";
						tempParamNames += paramTypeSimpleName + " " + paramName + ",";
						tempParamTypes += paramTypeSimpleName + ".class" + ",";
					}
					
					tempParamNames = tempParamNames.substring(0,tempParamNames.length()-1) ;
					tempParamTypes = tempParamTypes.substring(0,tempParamTypes.length()-1);
					tempparamName = tempparamName.substring(0, tempparamName.length()-1);
					
					methodStr += "("+tempParamNames+"){" + rt
							+ "		try{" +  rt
							+ "			Method m = " + inface.getName()+".class.getMethod(\"" + method.getName() + "\",new Class[]{"+tempParamTypes+"});" + rt
							+ "			handler.invoke(this,m,new Object[]{"+tempparamName+"});" + rt
							+ "		}catch(Exception e) {" + rt 
							+ "			e.printStackTrace();" + rt
							+ "		}catch(Throwable e){" + rt
							+ "			e.printStackTrace();" + rt
							+ "		}" + rt
							+ "	}" + rt + "" + rt;
					
				} else {
					methodStr += "(){" + rt 
							+ "		try{" + rt 
							+ "			Method m = " + inface.getName() + ".class.getMethod(\"" + method.getName() + "\");" + rt 
							+ "			return (" + returnType.getSimpleName() + ")handler.invoke(this,m,new Object[]{});" + rt
							+ "		}catch(Exception e) {" + rt
							+ "			e.printStackTrace();" + rt 
							+ "		}catch(Throwable e){" + rt
							+ "			e.printStackTrace();" + rt 
							+ "		}" + rt
							+ "			return null;" + rt 
							+ "	}" + rt + "" + rt;
				}
			}
		} else {
			// 没有方法
		}
		
		
		// 获取当前接口的包名
		Package pack = inface.getPackage();
		String packageName = pack.getName();

		String score = "package " + packageName + ";" + rt + "" + rt
				+ "import java.lang.reflect.Method;" + rt + "" + rt
				+ "public class $ProxyClass implements "
				+ inface.getSimpleName() + " { " + rt + "" + rt + "	"
				+ packageName + ".InvocationHandler handler;" + rt + "" + rt
				+ "	public $ProxyClass(InvocationHandler handler) {" + rt
				+ "		this.handler = handler;" + rt + "	}" + rt + "" + rt +
				methodStr + rt +
				"}";
		
		
		//System.out.println(score);
		// 写入内存中

		Class<?> $proxyClass = writeClassToLoad(inface, score, packageName);

		return $proxyClass;
	}

	private static Class<?> writeClassToLoad(Class<?> inface, String score,
			String packageName) {

		String fileSeparator = File.separator;

		// 生成 源代码 目录
		String fileName = System.getProperty("user.dir") + fileSeparator
				+ "src" + fileSeparator + "main" + fileSeparator + "java"
				+ fileSeparator + packageName.replace(".", fileSeparator);

		// 生成到 本地
		File parentFile = new File(fileName);
		if (!parentFile.exists()) {
			parentFile.mkdir();
		}

		FileWriter fileWriter;
		try {
			fileWriter = new FileWriter(new File(parentFile, fileSeparator + "$ProxyClass.java"));
			fileWriter.write(score);
			fileWriter.flush();
			fileWriter.close();
		} catch (IOException e) {
			e.printStackTrace();
		}

		// 编译 本地 JAVA文件
		Class<?> $proxyClass = compilerClassToLoad(fileName, fileSeparator,packageName);
		
		
		return $proxyClass;
	}

	@SuppressWarnings("restriction")
	private static Class<?> compilerClassToLoad(String fileName,String fileSeparator,String packageName) {
		// 编译 compile

		// 1,拿到 API 编译器
		JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();

		// System.out.println("compiler : " + compiler);

		// 2,获取 JAVA file 管理器
		// 参数 null 意味都是用 默认的
		StandardJavaFileManager fileManager = compiler.getStandardFileManager(null, null, null);

		// 3,根据文件名字,获取一系列 JAVAFileObject 可使用多个
		// 通过 fileManager找到 fileName
		Iterable untis = fileManager.getJavaFileObjects(fileName + fileSeparator + ".$ProxyClass.java");

		// 4,获取编译任务
		CompilationTask task = compiler.getTask(null, fileManager, null, null,null, untis);

		// 5,实行任务
		task.call();

		try {
			// 6,关掉
			fileManager.close();
		} catch (IOException e) {
			e.printStackTrace();
		}

		// load 到 内存 和 生成新对象
		try {
			URL[] urls = new URL[] { new URL("file:" + fileSeparator + System.getProperty("user.dir") + fileSeparator + "src"
					+ fileSeparator + "main" + fileSeparator + "java") };

			URLClassLoader classLoader = new URLClassLoader(urls);
			Class<?> clazz = classLoader.loadClass(packageName + ".$ProxyClass");

			return clazz;
			
		} catch (MalformedURLException e) {
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SecurityException e) {
			e.printStackTrace();
		} catch (IllegalArgumentException e) {
			e.printStackTrace();
		}
		return null;
	}
	
	
	
    public static boolean isProxyClass(Class<?> cl) {
        if (cl == null) {
            throw new NullPointerException();
        }
        return proxyClasses.containsKey(cl);
    }
    
    
    private static Object newInstance(Constructor<?> cons, InvocationHandler h) {
    	 try {
			return cons.newInstance(new Object[] {h} );
		} catch (InstantiationException e) {
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			e.printStackTrace();
		} catch (IllegalArgumentException e) {
			e.printStackTrace();
		} catch (InvocationTargetException e) {
			e.printStackTrace();
		}
    	 
    	 return null;
    }
}


//======================User =======================

package org.sung.java.custom.dynamicProxy;

public class User {
	
	private int id;
	private String name;
	private String pwd;
	
	
	public User() {
		super();
	}

	public User(int id, String name, String pwd) {
		super();
		this.id = id;
		this.name = name;
		this.pwd = pwd;
	}

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getPwd() {
		return pwd;
	}

	public void setPwd(String pwd) {
		this.pwd = pwd;
	}

	@Override
	public String toString() {
		return "User [id=" + id + ", name=" + name + ", pwd=" + pwd + "]";
	}
}


//======================HelloWord =======================
package org.sung.java.custom.dynamicProxy;

public interface HelloWord {
	void setMsg(String msg,String name);
	String getMsg();
	
	void setUser(User user);
	
	User getUser();
}

//======================HelloWordImpl =======================
package org.sung.java.custom.dynamicProxy;

public class HelloWordImpl implements HelloWord{

	public void setMsg(String msg,String name) {
		System.out.println(msg + ": " + name);
	}

	public String getMsg() {
		return "hello : sungang";
	}

	public void setUser(User user) {
		System.out.println(user.toString());
	}

	public User getUser() {
		User user = new User(1, "sungang", "12346");
		return user;
	}
}	

//======================LogHandler =======================

package org.sung.java.custom.dynamicProxy;

import java.lang.reflect.Method;

public class LogHandler implements InvocationHandler{
	
	private Object target;
	
	
	public LogHandler(Object target) {
		super();
		this.target = target;
	}

	public Object invoke(Object proxy, Method method, Object[] args)
			throws Throwable {
		System.out.println("log start ............");
		return method.invoke(target, args);
	}

}


//======================Client =======================
package org.sung.java.custom.dynamicProxy;

import java.io.IOException;

public class Client {

	public static void main(String[] args) throws IOException {

		HelloWord iHelloWord = new HelloWordImpl();
		LogHandler handler = new LogHandler(iHelloWord);
		HelloWord helloWord = (HelloWord) Proxy.newProxyInstance(null,
				HelloWord.class, handler);

		helloWord.setMsg("hello ", "sungang");

		String msg = helloWord.getMsg();
		System.out.println(msg);
		
		helloWord.setUser(new User(1, "sungang", "123465"));
		
		User user = helloWord.getUser();
		System.out.println(user.toString());
	}
}

//======================运行结果 =======================
//log start ............
//hello : sungang
//log start ............
//hello : sungang
//log start ............
//User [id=1, name=sungang, pwd=123465]
//log start ............
//User [id=1, name=sungang, pwd=12346]
RunJS一些不错的东东... java
//1,Bootstrap树样式 
http://runjs.cn/detail/jspmxwka


//2,悬浮支持小图标菜单 
http://runjs.cn/detail/5igdlhhz


//3,image hover
http://runjs.cn/detail/0fk8dwbt

//4,仿天猫轮播 
http://runjs.cn/detail/tvqxftuj

//5,Bootstrap做的登录界面。 
http://runjs.cn/detail/f42nfs3g

//6,可拖动布局
http://runjs.cn/detail/dje5kzar

//7,多轴highcharts了。放在runjs感觉还不错 
http://runjs.cn/detail/pld0o7um

//8,jQuery KeyBoard 键盘
http://runjs.cn/detail/ncxf7e1u

//9,多皮肤悬浮QQ在线客服jQuery插件
http://runjs.cn/detail/kgawqf8s

//10,消息发送动画 
http://runjs.cn/detail/sqekys02

//11,2012大记事
http://runjs.cn/detail/2gkexwbq

//12,打飞机 1.0 Javascript版
http://runjs.cn/detail/6cpmot1v

//13,仿优酷视频图片轮转效果
http://runjs.cn/detail/3avdokbi

//14,3D动态玫瑰 
http://runjs.cn/detail/u1wj1jux

//15,FlexJS 丑陋的原生代码开发时钟效果
http://runjs.cn/detail/ofttquye

//16,TAGS 球形旋转
http://runjs.cn/detail/fkkvhvun


通过JDK动态代理和CGLIB动态代理实现springAOP功能 java
package cn.net.sung.test.java.moniAOP;

public interface PersonService {
	
	void save(String name);
	void update(String name,Integer personId);
	String getPersonName(Integer personId);
}

//======================================================
package cn.net.sung.test.java.moniAOP;

public class PersonServiceBean implements PersonService{

	private String user = null;
	
	public PersonServiceBean() {
		super();
	}
	
	public PersonServiceBean(String user) {
		super();
		this.user = user;
	}

	@Override
	public void save(String name) {
		 System.out.println("我是save()方法");
	}

	@Override
	public void update(String name, Integer personId) {
		System.out.println("我是update()方法");
	}

	@Override
	public String getPersonName(Integer personId) {
		System.out.println("我是getPersonName()方法");
        return "get";
	}

	public String getUser() {
		return user;
	}

	public void setUser(String user) {
		this.user = user;
	}
}

//======================================================
package cn.net.sung.test.java.moniAOP;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

public class JDKProxyFactory implements InvocationHandler {

	// 要代理的原始对象
	private Object targer;

	public Object createProxyInstance(Object targer) {
		this.targer = targer;
		return Proxy.newProxyInstance(this.targer.getClass().getClassLoader(),
				this.targer.getClass().getInterfaces(), this);
	}

	@Override
	public Object invoke(Object proxy, Method method, Object[] args)
			throws Throwable {
		Object result = null;
		PersonServiceBean bean = (PersonServiceBean) this.targer;

		if (bean.getUser() != null) {
			// 前置通知
			doBefore();
			try {
				result = method.invoke(targer, args);
				// 后置通知
				doAfter();
			} catch (Exception e) {
				// 例外通知
				doException();
			} finally {
				// 最终通知
				doFinally();
			}
		}
		return result;
	}

	private void doBefore() {
		System.out.println("我是前置通知");
	}

	private void doAfter() {
		System.out.println("我是后置通知");
	}

	private void doException() {
		System.out.println("我是例外通知");
	}

	private void doFinally() {
		System.out.println("我是最终通知");
	}

}

//======================================================
package cn.net.sung.test.java.moniAOP;

import java.lang.reflect.Method;

import net.sf.cglib.proxy.Enhancer;
import net.sf.cglib.proxy.MethodInterceptor;
import net.sf.cglib.proxy.MethodProxy;

public class CGlibProxyFactory implements MethodInterceptor {

	private Object target;

	public Object createProxyInstance(Object target) {
		this.target = target;
		Enhancer enhancer = new Enhancer();
		enhancer.setSuperclass(this.target.getClass());// 非final
		enhancer.setCallback(this);
		return enhancer.create();
	}

	@Override
	public Object intercept(Object proxy, Method methodProxy, Object[] args,
			MethodProxy arg3) throws Throwable {

		Object result = null;
		PersonServiceBean bean = (PersonServiceBean) this.target;
		if (bean.getUser() != null) {
			// 前置通知
			doBefore();
			try {
				result = methodProxy.invoke(target, args);
				// 后置通知
				doAfter();
			} catch (Exception e) {
				// 例外通知
				doException();
			} finally {
				// 最终通知
				doFinally();
			}
		}
		return result;
	}

	private void doBefore() {
		System.out.println("我是前置通知");
	}

	private void doAfter() {
		System.out.println("我是后置通知");
	}

	private void doException() {
		System.out.println("我是例外通知");
	}

	private void doFinally() {
		System.out.println("我是最终通知");
	}

}

//======================================================
package cn.net.sung.test.java.moniAOP;

public class AopTest {
	public static void main(String[] args) {
		//porxyTest1();
		porxyTest2();
	}
	
	private static void porxyTest1(){
		JDKProxyFactory jdkProxyFactory = new JDKProxyFactory();
		PersonService personService = (PersonService)jdkProxyFactory.createProxyInstance(new PersonServiceBean("孙刚"));
		personService.getPersonName(1);
	}
	
	private static void porxyTest2(){
		CGlibProxyFactory cGlibProxyFactory = new CGlibProxyFactory();
		PersonServiceBean personServiceBean = (PersonServiceBean)cGlibProxyFactory.createProxyInstance(new PersonServiceBean("孙刚2"));
		personServiceBean.getPersonName(2);
			
	}
}

//======================================================


JAVA调用增删改的存储过程 java
http://www.cnblogs.com/linjiqin/archive/2011/04/17/2019074.html
文件操作工具类 java
package com.ptn.utils;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.util.HashSet;
import java.util.Set;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import java.util.zip.ZipOutputStream;

import org.apache.log4j.Logger;


/**
* 文件工具类
*
* @author jiqinlin
*
*/
public class FileTool {
private static final Logger log = Logger.getLogger(FileTool.class);

/**
* 创建目录
*
* @param dir 目录
*/
public static void mkdir(String dir) {
try {
String dirTemp = dir;
File dirPath = new File(dirTemp);
if (!dirPath.exists()) {
dirPath.mkdir();
}
} catch (Exception e) {
log.error("创建目录操作出错: "+e.getMessage());
e.printStackTrace();
}
}


/**
* 新建文件
*
* @param fileName
* String 包含路径的文件名 如:E:\phsftp\src\123.txt
* @param content
* String 文件内容
*
*/
public static void createNewFile(String fileName, String content) {
try {
String fileNameTemp = fileName;
File filePath = new File(fileNameTemp);
if (!filePath.exists()) {
filePath.createNewFile();
}
FileWriter fw = new FileWriter(filePath);
PrintWriter pw = new PrintWriter(fw);
String strContent = content;
pw.println(strContent);
pw.flush();
pw.close();
fw.close();
} catch (Exception e) {
log.error("新建文件操作出错: "+e.getMessage());
e.printStackTrace();
}

}

/**
* 删除文件
*
* @param fileName 包含路径的文件名
*/
public static void delFile(String fileName) {
try {
String filePath = fileName;
java.io.File delFile = new java.io.File(filePath);
delFile.delete();
} catch (Exception e) {
log.error("删除文件操作出错: "+e.getMessage());
e.printStackTrace();
}
}


/**
* 删除文件夹
*
* @param folderPath 文件夹路径
*/
public static void delFolder(String folderPath) {
try {
// 删除文件夹里面所有内容
delAllFile(folderPath);
String filePath = folderPath;
java.io.File myFilePath = new java.io.File(filePath);
// 删除空文件夹
myFilePath.delete();
} catch (Exception e) {
log.error("删除文件夹操作出错"+e.getMessage());
e.printStackTrace();
}
}


/**
* 删除文件夹里面的所有文件
*
* @param path 文件夹路径
*/
public static void delAllFile(String path) {
File file = new File(path);
if (!file.exists()) {
return;
}
if (!file.isDirectory()) {
return;
}
String[] childFiles = file.list();
File temp = null;
for (int i = 0; i < childFiles.length; i++) {
//File.separator与系统有关的默认名称分隔符
//在UNIX系统上,此字段的值为'/';在Microsoft Windows系统上,它为 '\'。
if (path.endsWith(File.separator)) {
temp = new File(path + childFiles[i]);
} else {
temp = new File(path + File.separator + childFiles[i]);
}
if (temp.isFile()) {
temp.delete();
}
if (temp.isDirectory()) {
delAllFile(path + "/" + childFiles[i]);// 先删除文件夹里面的文件
delFolder(path + "/" + childFiles[i]);// 再删除空文件夹
}
}
}


/**
* 复制单个文件
*
* @param srcFile
* 包含路径的源文件 如:E:/phsftp/src/abc.txt
* @param dirDest
* 目标文件目录;若文件目录不存在则自动创建 如:E:/phsftp/dest
* @throws IOException
*/
public static void copyFile(String srcFile, String dirDest) {
try {
FileInputStream in = new FileInputStream(srcFile);
mkdir(dirDest);
FileOutputStream out = new FileOutputStream(dirDest+"/"+new File(srcFile).getName());
int len;
byte buffer[] = new byte[1024];
while ((len = in.read(buffer)) != -1) {
out.write(buffer, 0, len);
}
out.flush();
out.close();
in.close();
} catch (Exception e) {
log.error("复制文件操作出错:"+e.getMessage());
e.printStackTrace();
}
}

/**
* 复制文件夹
*
* @param oldPath
* String 源文件夹路径 如:E:/phsftp/src
* @param newPath
* String 目标文件夹路径 如:E:/phsftp/dest
* @return boolean
*/
public static void copyFolder(String oldPath, String newPath) {
try {
// 如果文件夹不存在 则新建文件夹
mkdir(newPath);
File file = new File(oldPath);
String[] files = file.list();
File temp = null;
for (int i = 0; i < files.length; i++) {
if (oldPath.endsWith(File.separator)) {
temp = new File(oldPath + files[i]);
} else {
temp = new File(oldPath + File.separator + files[i]);
}

if (temp.isFile()) {
FileInputStream input = new FileInputStream(temp);
FileOutputStream output = new FileOutputStream(newPath
+ "/" + (temp.getName()).toString());
byte[] buffer = new byte[1024 * 2];
int len;
while ((len = input.read(buffer)) != -1) {
output.write(buffer, 0, len);
}
output.flush();
output.close();
input.close();
}
if (temp.isDirectory()) {// 如果是子文件夹
copyFolder(oldPath + "/" + files[i], newPath + "/" + files[i]);
}
}
} catch (Exception e) {
log.error("复制文件夹操作出错:"+e.getMessage());
e.printStackTrace();
}
}

/**
* 移动文件到指定目录
*
* @param oldPath 包含路径的文件名 如:E:/phsftp/src/ljq.txt
* @param newPath 目标文件目录 如:E:/phsftp/dest
*/
public static void moveFile(String oldPath, String newPath) {
copyFile(oldPath, newPath);
delFile(oldPath);
}

/**
* 移动文件到指定目录,不会删除文件夹
*
* @param oldPath 源文件目录 如:E:/phsftp/src
* @param newPath 目标文件目录 如:E:/phsftp/dest
*/
public static void moveFiles(String oldPath, String newPath) {
copyFolder(oldPath, newPath);
delAllFile(oldPath);
}

/**
* 移动文件到指定目录,会删除文件夹
*
* @param oldPath 源文件目录 如:E:/phsftp/src
* @param newPath 目标文件目录 如:E:/phsftp/dest
*/
public static void moveFolder(String oldPath, String newPath) {
copyFolder(oldPath, newPath);
delFolder(oldPath);
}

/**
* 解压zip文件
*
* @param srcDir
* 解压前存放的目录
* @param destDir
* 解压后存放的目录
* @throws Exception
*/
public static void jieYaZip(String srcDir, String destDir) throws Exception {
int leng = 0;
byte[] b = new byte[1024*2];
/** 获取zip格式的文件 **/
File[] zipFiles = new FileFilterByExtension("zip").getFiles(srcDir);
if(zipFiles!=null && !"".equals(zipFiles)){
for (int i = 0; i < zipFiles.length; i++) {
File file = zipFiles[i];
/** 解压的输入流 * */
ZipInputStream zis = new ZipInputStream(new FileInputStream(file));
ZipEntry entry=null;
while ((entry=zis.getNextEntry())!=null) {
File destFile =null;
if(destDir.endsWith(File.separator)){
destFile = new File(destDir + entry.getName());
}else {
destFile = new File(destDir + "/" + entry.getName());
}
/** 把解压包中的文件拷贝到目标目录 * */
FileOutputStream fos = new FileOutputStream(destFile);
while ((leng = zis.read(b)) != -1) {
fos.write(b, 0, leng);
}
fos.close();
}
zis.close();
}
}
}

/**
* 压缩文件
*
* @param srcDir
* 压缩前存放的目录
* @param destDir
* 压缩后存放的目录
* @throws Exception
*/
public static void yaSuoZip(String srcDir, String destDir) throws Exception {
String tempFileName=null;
byte[] buf = new byte[1024*2];
int len;
//获取要压缩的文件
File[] files = new File(srcDir).listFiles();
if(files!=null){
for (File file : files) {
if(file.isFile()){
FileInputStream fis = new FileInputStream(file);
BufferedInputStream bis = new BufferedInputStream(fis);
if (destDir.endsWith(File.separator)) {
tempFileName = destDir + file.getName() + ".zip";
} else {
tempFileName = destDir + "/" + file.getName() + ".zip";
}
FileOutputStream fos = new FileOutputStream(tempFileName);
BufferedOutputStream bos = new BufferedOutputStream(fos);
ZipOutputStream zos = new ZipOutputStream(bos);// 压缩包

ZipEntry ze = new ZipEntry(file.getName());// 压缩包文件名
zos.putNextEntry(ze);// 写入新的ZIP文件条目并将流定位到条目数据的开始处

while ((len = bis.read(buf)) != -1) {
zos.write(buf, 0, len);
zos.flush();
}
bis.close();
zos.close();

}
}
}
}


/**
* 读取数据
*
* @param inSream
* @param charsetName
* @return
* @throws Exception
*/
public static String readData(InputStream inSream, String charsetName) throws Exception{
ByteArrayOutputStream outStream = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int len = -1;
while( (len = inSream.read(buffer)) != -1 ){
outStream.write(buffer, 0, len);
}
byte[] data = outStream.toByteArray();
outStream.close();
inSream.close();
return new String(data, charsetName);
}

/**
* 一行一行读取文件,适合字符读取,若读取中文字符时会出现乱码
*
* @param path
* @return
* @throws Exception
*/
public static Set<String> readFile(String path) throws Exception{
Set<String> datas=new HashSet<String>();
FileReader fr=new FileReader(path);
BufferedReader br=new BufferedReader(fr);
String line=null;
while ((line=br.readLine())!=null) {
datas.add(line);
}
br.close();
fr.close();
return datas;
}
}

//=======================测试========================

package juint.test;

import java.io.File;
import java.io.InputStream;
import java.util.Set;

import org.apache.log4j.Logger;
import org.junit.Test;

import com.ptn.utils.FileFilterByExtension;
import com.ptn.utils.FileTool;
import com.ptn.utils.UrlTool;

public class FileToolTest {
private static final Logger log = Logger.getLogger(FileToolTest.class);

/**
* 创建目录
*/
@Test
public void mkdir(){
FileTool.mkdir("e:/ljq");
}

/**
* 新建文件
*/
@Test
public void createNewFile(){
try {
InputStream inStream=FileToolTest.class.getClassLoader().getResourceAsStream("903_13_5990_1001220007.xml");
String data=FileTool.readData(inStream, "UTF-8");
FileTool.createNewFile("e:/ljq.xml", data);
} catch (Exception e) {
e.printStackTrace();
}
}

/**
* 删除文件
*
*/
@Test
public void delFile() {
FileTool.delFile(UrlTool.readUrl("dirSrc")+"/123.txt");
}

/**
* 删除文件夹
*
*/
@Test
public void delFolder() {
FileTool.delFolder(UrlTool.readUrl("dirDest"));
}

/**
* 删除文件夹里面的所有文件
*
*/
@Test
public void delAllFile() {
FileTool.delAllFile(UrlTool.readUrl("dirDest"));
}

/**
* 复制文件
*/
@Test
public void copyFile() {
// 获取文件源目录
String dirSrc = UrlTool.readUrl("dirSrc");
// 获取文件目标目录
String dirDest = UrlTool.readUrl("dirDest");
if (dirSrc == null || "".equals(dirSrc)) {
log.error("dirSrc目录不存在");
return;
}
File[] files = new FileFilterByExtension("").getFiles(dirSrc);
if(files!=null){
for(File file:files){
FileTool.copyFile(file.getAbsolutePath(), dirDest);
}
}
}


@Test
public void copyFolder(){
// 获取文件源目录
String dirSrc = UrlTool.readUrl("dirSrc");
// 获取文件目标目录
String dirDest = UrlTool.readUrl("dirDest");
FileTool.copyFolder(dirSrc, dirDest);
}

/**
* 移动文件到指定目录
*/
@Test
public void moveFile(){
FileTool.moveFile(UrlTool.readUrl("dirSrc")+"/abc.txt",
UrlTool.readUrl("dirDest"));
}

/**
* 移动文件到指定目录
*/
@Test
public void moveFolder(){
FileTool.moveFolder(UrlTool.readUrl("dirSrc"), UrlTool.readUrl("dirDest"));
}

/**
* 移动文件到指定目录
*/
@Test
public void moveFiles(){
FileTool.moveFiles(UrlTool.readUrl("dirSrc"), UrlTool.readUrl("dirDest"));
}

/**
* 解压
*/
@Test
public void jieYaZip(){
try {
FileTool.jieYaZip(UrlTool.readUrl("dirSrc"), UrlTool.readUrl("dirDest"));
} catch (Exception e) {
e.printStackTrace();
}
}

/**
* 压缩
*/
@Test
public void yaSuoZip(){
try {
FileTool.yaSuoZip(UrlTool.readUrl("dirSrc"), UrlTool.readUrl("dirDest"));
} catch (Exception e) {
e.printStackTrace();
}
}


@Test
public void readFile() throws Exception{
Set<String> datas=FileTool.readFile("E:\\phsftp\\sql\\ycxk_srm_901_13_R_1103040036_20110419142544.txt");
for(String data:datas){
System.out.println(data);
}
}
}文件操作工具类
RandomStringUtils工具类测试 java
package cn.net.sung.test.java.gongjulei;

import org.apache.commons.lang.RandomStringUtils;

public class RandomStringUtilsTest {
	
	public static void main(String[] args) {
		//产生5位长度的随机字符串,中文环境下是乱码
		String r1 = RandomStringUtils.random(5);
		System.out.println(r1);
		
		//使用指定的字符生成5位长度的随机字符串
		String r2 = RandomStringUtils.random(5, new char[]{'a','b','c','d','e','f', '1', '2', '3'});
		System.out.println(r2);//313af
		

		//生成指定长度的字母和数字的随机组合字符串
		String r3 = RandomStringUtils.randomAlphanumeric(16);
		System.out.println(r3);//XAdAHrDZIYT5Pex6
		
		//生成随机数字字符串
		String r4 = RandomStringUtils.randomNumeric(5);
		System.out.println(r4);//65445
		
		//生成随机[a-z]字符串,包含大小写
		String r5 = RandomStringUtils.randomAlphabetic(5);
		System.out.println(r5);//zOMqg
		
		//生成从ASCII 32到126组成的随机字符串 
		String r6 = RandomStringUtils.randomAscii(4);
		System.out.println(r6);//r['_
	}
}
测试一片文章各个字符出现了多少次 java
String s = "上面各位兄弟说的都对,我这里就总结一下,站在巨人的肩膀上啦,嘿嘿";
		Map<String, Integer> map = new HashMap<String, Integer>();
		for (int i = 0; i < s.length(); i++) {
			char c = s.charAt(i);
			String tempKey = String.valueOf(c);
			if (map.containsKey(tempKey)) {
				Integer tempValue =map.get(tempKey);
				map.put(tempKey, tempValue+1);
			}else {
				map.put(tempKey, 1);
			}
		}
		//第一种
		for (String key : map.keySet()) {
			System.out.println(key + " : " + map.get(key) );
		}
利用JDK 动态代理实现 拦截器功能 java
package cn.cd.sg.test.proxy;

public interface DynamicProxyFactory {
	/**
	* 描述  : 生成动态代理,并且在调用代理执行函数的时候使用拦截器
	* 方法名: createProxy
	* 创建人:孙刚   
	* 创建时间:2014-5-29 下午01:53:21
	* @param <T>
	* @param target 实现此接口的类  
	* @param interceptor 拦截器  
	* @return :T
	 */
	public <T> T createProxy(T target,Interceptor interceptor);
}

//===================================================================================================


package cn.cd.sg.test.proxy;


public class DynamicProxyFactoryImpl implements DynamicProxyFactory {

	/**
	 * 生成动态代理,并且在调用代理执行函数的时候使用拦截器 Title: createProxy
	 * 
	 * @param target
	 *            需要代理的实例
	 * @param interceptor
	 *            拦截器实现,就是我们希望代理类执行函数的前后, 抛出异常,finally的时候去做写什么
	 * @return
	 */
	@SuppressWarnings("unchecked")
	@Override
	public <T> T createProxy(T target, Interceptor interceptor) {
		// 当前对象的类加载器
		ClassLoader classLoader = target.getClass().getClassLoader();
		// 获取此对象实现的所有接
		Class<?>[] interfaces = target.getClass().getInterfaces();
		DynamicProxyInvocationHandler handler = new DynamicProxyInvocationHandler(
				target, interceptor);
		return (T) handler.getProxy();
	}

}


//==================================================================================================package cn.cd.sg.test.proxy;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

/*
 * 动态代理的调用处理器 
 */
public class DynamicProxyInvocationHandler implements InvocationHandler {

	private Object target;
	private Interceptor interceptor;

	/*
	 * target: 需要代理的实例 interceptor:拦截器
	 */
	public DynamicProxyInvocationHandler(Object target, Interceptor interceptor) {
		this.target = target;
		this.interceptor = interceptor;
	}

	@Override
	public Object invoke(Object proxy, Method method, Object[] args)
			throws Throwable {
		Object result = null;

		try {
			// 在执行method之前调用interceptor去做什么事
			this.interceptor.before(method, args);
			// 在这里我们调用原始实例的method
			result = method.invoke(target, args);
			// 在执行method之后调用interceptor去做什么事
			this.interceptor.after(method, args);

		} catch (Exception e) {
			// 在发生异常之后调用interceptor去做什么事
			this.interceptor.afterThrowing(method, args, e);
		} finally {
			// 在finally之后调用interceptor去做什么事
			this.interceptor.afterFinally(method, args);
		}
		return result;
	}

	/**
	 * 获取目标对象的代理对象
	 * 
	 * @return 代理对象
	 */
	public Object getProxy() {
		return Proxy.newProxyInstance(Thread.currentThread()
				.getContextClassLoader(), target.getClass().getInterfaces(),
				this);
	}
}

//=============================================================================================
package cn.cd.sg.test.proxy;

import java.lang.reflect.Method;

public interface Interceptor {

	void before(Method method, Object[] args);

	void after(Method method, Object[] args);

	void afterThrowing(Method method, Object[] args, Throwable throwable);

	void afterFinally(Method method, Object[] args);
}



//=============================================================================================
package cn.cd.sg.test.proxy;

import java.lang.reflect.Method;

public class InterceptorImpl implements Interceptor{

	@Override
	public void after(Method method, Object[] args) {
		System.out.println("after invoking method: " + method.getName());   
	}

	@Override
	public void afterFinally(Method method, Object[] args) {
		System.out.println("afterFinally invoking method: " + method.getName());   
	}

	@Override
	public void afterThrowing(Method method, Object[] args, Throwable throwable) {
		System.out.println("afterThrowing invoking method: " + method.getName());   
	}

	@Override
	public void before(Method method, Object[] args) {
		System.out.println("before invoking method: " + method.getName()); 
	}

}


//=============================================================================================
package cn.cd.sg.test.proxy;

public interface Service {
	 public String greet(String name);   
}


//=============================================================================================

package cn.cd.sg.test.proxy;

public class ServiceImpl implements Service{

	@Override
	public String greet(String name) {
		String result = "Hello, " + name;   
		System.out.println(result);   
		return result;   
	}
}	

//=============================================================================================
package cn.cd.sg.test.proxy;

public class TestDynamicProxy {
	
	public TestDynamicProxy(){
		DynamicProxyFactory dynamicProxyFactory = new DynamicProxyFactoryImpl();
		Interceptor interceptor = new InterceptorImpl();
		Service service = new ServiceImpl();
		
		Service service2 = dynamicProxyFactory.createProxy(service, interceptor);
		
		service2.greet("孙刚");
	}
	
	public static void main(String[] args) {
		new TestDynamicProxy();
	}
}


LangDemoTest java
package apache.commons.lang.test;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.Calendar;
import java.util.Date;
import java.util.Iterator;

import org.apache.commons.lang3.ArrayUtils;
import org.apache.commons.lang3.CharSet;
import org.apache.commons.lang3.CharSetUtils;
import org.apache.commons.lang3.ClassUtils;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.RandomStringUtils;
import org.apache.commons.lang3.SerializationUtils;
import org.apache.commons.lang3.StringEscapeUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.SystemUtils;
import org.apache.commons.lang3.Validate;
import org.apache.commons.lang3.builder.EqualsBuilder;
import org.apache.commons.lang3.builder.HashCodeBuilder;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import org.apache.commons.lang3.math.NumberUtils;
import org.apache.commons.lang3.text.WordUtils;
import org.apache.commons.lang3.time.DateFormatUtils;
import org.apache.commons.lang3.time.DateUtils;
import org.apache.commons.lang3.time.StopWatch;

public class LangDemoTest {
	
	
	public void charSetDemo(){
		System.out.println(StringUtils.center(" charSetDemo ", 40, "="));
		CharSet charSet = CharSet.getInstance("aeiou");
		String demoStr = "The quick brown fox jumps over the lazy dog.";
		int count = 0;
		for (int i = 0, len = demoStr.length(); i < len; i++) {
            if (charSet.contains (demoStr.charAt (i) ) ) {
                count++;
            }
        }
		System.out.println("count : " + count);
	}
	
	public void charSetUtilsDemo(){
		System.out.println(StringUtils.center(" charSetUtilsDemo ", 40 , "="));
		System.out.println("计算字符串中包含某字符数");
		System.out.println(CharSetUtils.count(
				"The quick brown fox jumps over the lazy dog.", "aeiou"));
		System.out.println ("删除字符串中某字符.");
		System.out.println (CharSetUtils.delete (
                "The quick brown fox jumps over the lazy dog.", "aeiou") );
		System.out.println ("保留字符串中某字符.");
		System.out.println(CharSetUtils.keep (
				"The quick brown fox jumps over the lazy dog.", "aeiou"));
		System.out.println ("合并重复的字符.");
        System.out.println (CharSetUtils.squeeze ("a  bbbbbb     c dd", "b d") );
        
	}
	
	public void objectUtilsDemo(){
		System.out.println(StringUtils.center(" objectUtilsDemo ", 40,"="));
		System.out.println ("Object为null时,默认打印某字符.");
		Object object = null;
		System.out.println(ObjectUtils.defaultIfNull(object,"object is null "));
		
		System.out.println ("验证两个引用是否指向的Object是否相等,取决于Object的equals()方法.");
		Object a = new Object();
		Object b = a;
		Object c = new Object();
		System.out.println(ObjectUtils.equals(a, b));
		System.out.println(ObjectUtils.equals(a, c));
		
		System.out.println ("用父类Object的toString()方法返回对象信息.");
		Date date = new Date();
		System.out.println(ObjectUtils.identityToString(date));
		System.out.println(date);
		
		System.out.println ("返回类本身的toString()方法结果,对象为null时,返回0长度字符串.");
		System.out.println (ObjectUtils.toString (date) );
		System.out.println (ObjectUtils.toString (null) );
		System.out.println (date);
	}
	
	public void serializationUtilsDemo(){
		System.out.println(StringUtils.center(" serializationUtilsDemo ", 40, "="));
		Date date = new Date();
		byte[] bytes = SerializationUtils.serialize(date);
		System.out.println(ArrayUtils.toString(bytes));
		System.out.println (date);
		
		Date reDate = (Date)SerializationUtils.deserialize(bytes);
		System.out.println(reDate);
		System.out.println(ObjectUtils.equals(date, reDate));
		System.out.println(date == reDate);
		
		FileOutputStream fos = null;
		FileInputStream fis = null;
		
		try {
			fos = new FileOutputStream(new File("D:" + File.separator + "test.txt"));
			fis = new FileInputStream(new File("D:" + File.separator + "test.txt"));
			SerializationUtils.serialize(date,fos);
			Date reDate2 = (Date)SerializationUtils.deserialize(fis);
			System.out.println(date.equals(reDate2));
			
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
			try {
				fos.close();
				fis.close();
			} catch (Exception e2) {
				e2.printStackTrace();
			}
		}
	}
	
	public void randomStringUtilsDemo(){
		System.out.println(StringUtils.center(" randomStringUtilsDemo ", 40, "="));
		System.out.println("生成指定长度的随机字符串,好像没什么用");
		System.out.println(RandomStringUtils.random(500));
		
		System.out.println ("在指定字符串中生成长度为n的随机字符串.");
		System.out.println(RandomStringUtils.random(5, "reafgaby"));
		
		System.out.println ("指定从字符或数字中生成随机字符串.");
		System.out.println(RandomStringUtils.random(5,true,false));
		System.out.println(RandomStringUtils.random(5,false,true));
	}
	
	public void stringUtilsDemo(){
		System.out.println(StringUtils.center(" stringUtilsDemo ", 40, "="));
		System.out.println ("将字符串重复n次,将文字按某宽度居中,将字符串数组用某字符串连接.");
		String[] header = new String[3];
		header[0] = StringUtils.repeat("*", 50);
		header[1] = StringUtils.center(" StringUtils ", 50,"^o^");
		header[2] = header[0] ;
		String head = StringUtils.join(header,"\n");
		System.out.println(head);
		
		System.out.println ("缩短到某长度,用...结尾.");
		System.out.println (StringUtils.abbreviate (
                "The quick brown fox jumps over the lazy dog.", 10) );
		
		System.out.println ("返回两字符串不同处索引号.");
        System.out.println (StringUtils.indexOfDifference ("aaabc", "aaacc") );
        
        System.out.println ("返回两字符串不同处开始至结束.");
        System.out.println (StringUtils.difference ("aaabcde", "aaaccde") );
        
        System.out.println ("截去字符串为以指定字符串结尾的部分.");
        System.out.println (StringUtils.chomp ("aaabcde", "de") );
        
        System.out.println ("检查一字符串是否为另一字符串的子集.");
        System.out.println (StringUtils.containsOnly ("aad", "aadd") );
        
        System.out.println ("检查一字符串是否包含另一字符串.");
        System.out.println (StringUtils.contains ("defg", "ef") );
        System.out.println (StringUtils.containsOnly ("ef", "defg") );
        
        System.out.println ("返回可以处理null的toString().");
        System.out.println (StringUtils.defaultString ("aaaa") );
        System.out.println ("?" + StringUtils.defaultString (null) + "!");
        
        System.out.println ("去除字符中的空格.");
        System.out.println (StringUtils.deleteWhitespace ("aa  bb  cc") );
        
        System.out.println ("分隔符处理成数组.");
        String[] strArray = StringUtils.split ("a,b,,c,d,null,e", ",");
        System.out.println (strArray.length);
        System.out.println (strArray.toString() );
        
        System.out.println ("判断是否是某类字符.");
        System.out.println (StringUtils.isAlpha ("ab") );
        System.out.println (StringUtils.isAlphanumeric ("12") );
        System.out.println (StringUtils.isBlank ("") );
        System.out.println (StringUtils.isNumeric ("123") );
	}
	
	
	public void systemUtilsDemo(){
		System.out.println(StringUtils.center(" systemUtilsDemo ", 40, "="));
		System.out.println ("获得系统文件分隔符.");
		System.out.println(SystemUtils.FILE_SEPARATOR);
		
		System.out.println ("获得源文件编码.");
		System.out.println(SystemUtils.FILE_ENCODING);
		
        System.out.println ("获得ext目录.");
        System.out.println(SystemUtils.JAVA_EXT_DIRS);
        
        System.out.println ("获得java版本.");
        System.out.println (SystemUtils.JAVA_VM_VERSION);
        
        System.out.println ("获得java厂商.");
        System.out.println (SystemUtils.JAVA_VENDOR);
        
        
	}
	
	public void classUtilsDemo(){
		System.out.println(StringUtils.center(" classUtilsDemo ", 40, "="));
		System.out.println ("获取类实现的所有接口.");
		System.out.println(ClassUtils.getAllInterfaces(Date.class));
		
		System.out.println ("获取类所有父类.");
		System.out.println(ClassUtils.getAllSuperclasses(Date.class));
		
		System.out.println ("获取简单类名.");
		System.out.println(ClassUtils.getSimpleName(Date.class));
		
		System.out.println ("获取包名.");
		System.out.println(ClassUtils.getPackageName(Date.class));
		
		System.out.println ("判断是否可以转型.");
		System.out.println(ClassUtils.isAssignable(Date.class, Object.class));
		System.out.println(ClassUtils.isAssignable(Object.class, Date.class));
	}
	
	public void stringEscapeUtilsDemo(){
		System.out.println(StringUtils.center(" stringEscapeUtilsDemo ", 40,"="));
		System.out.println("转换特殊字符.");
		System.out.println("html : " + StringEscapeUtils.escapeHtml3(" "));
		System.out.println("html : " + StringEscapeUtils.escapeHtml4(" "));
		System.out.println("html : " + StringEscapeUtils.unescapeHtml3("<p>"));
		System.out.println("html : " + StringEscapeUtils.unescapeHtml4("<p>"));
		
	}
	
	
	private final class BuildDemo{
		String name;
		int age;
		
		public BuildDemo (String name, int age) {
            this.name = name;
            this.age = age;
        }
		 public String toString() {
	            ToStringBuilder tsb = new ToStringBuilder (this, ToStringStyle.MULTI_LINE_STYLE);
	            tsb.append ("Name", name);
	            tsb.append ("Age", age);
	            return tsb.toString();
	        }
	 
	        public int hashCode() {
	            HashCodeBuilder hcb = new HashCodeBuilder();
	            hcb.append (name);
	            hcb.append (age);
	            return hcb.hashCode();
	        }
	 
	        public boolean equals (Object obj) {
	            if (! (obj instanceof BuildDemo) ) {
	                return false;
	            }
	            BuildDemo bd = (BuildDemo) obj;
	            EqualsBuilder eb = new EqualsBuilder();
	            eb.append (name, bd.name);
	            eb.append (age, bd.age);
	            return eb.isEquals();
	        }
	}
	
	public void builderDemo(){
		System.out.println(StringUtils.center(" builderDemo ", 40, "="));
		
		BuildDemo buildDemo = new BuildDemo("a", 1);
		BuildDemo buildDemo2 = new BuildDemo("b", 2);
		BuildDemo buildDemo3 = new BuildDemo("a", 1);
		
		System.out.println(" toString() ");
		System.out.println(buildDemo);
		System.out.println(buildDemo2);
		System.out.println(buildDemo3);
		
		System.out.println ("hashCode()");
		System.out.println (buildDemo.hashCode() );
		System.out.println (buildDemo2.hashCode() );
		System.out.println (buildDemo3.hashCode() );
		
		System.out.println ("equals()");
		System.out.println (buildDemo.equals (buildDemo2) );
		System.out.println (buildDemo.equals (buildDemo3) );
	}
	
	public void numberUtils(){
		System.out.println(StringUtils.center(" numberUtils  ", 40, "="));
		System.out.println ("字符串转为数字(不知道有什么用).");
		System.out.println(NumberUtils.toInt("ba",33));
		
		System.out.println ("从数组中选出最大值.");
		System.out.println (NumberUtils.max (new int[] { 1, 2, 3, 4 }) );
		
		System.out.println ("判断字符串是否全是整数.");
		System.out.println (NumberUtils.isDigits ("123.1") );
		System.out.println (NumberUtils.isDigits ("123") );
		
		System.out.println ("判断字符串是否是有效数字.");
		System.out.println (NumberUtils.isNumber ("0123.1") );
		System.out.println (NumberUtils.isNumber ("123.1") );
	}
	
	public void dateFormatUtilsDemo(){
		System.out.println(StringUtils.center(" dateFormatUtilsDemo ", 40, "="));
		System.out.println ("格式化日期输出.");
		//System.out.println (DateFormatUtils.format (System.currentTimeMillis(), "yyyy-MM-dd HH:mm:ss") );
		
		System.out.println ("秒表.");
        StopWatch sw = new StopWatch();
        sw.start();
        
        for (Iterator iterator = DateUtils.iterator (new Date(), DateUtils.RANGE_WEEK_CENTER); iterator.hasNext();) {
            Calendar cal = (Calendar) iterator.next();
            System.out.println (DateFormatUtils.format (cal.getTime(),
                                "yy-MM-dd HH:mm") );
        }
 
        sw.stop();
        System.out.println ("秒表计时:" + sw.getTime() );
	}
	
	private void validateDemo() {
        String[] strarray = {"a", "b", "c"};
        System.out.println ("验证功能");
        System.out.println (Validate.notEmpty (strarray) );
    }

	 private void wordUtilsDemo() {
		 System.out.println(StringUtils.center(" wordUtilsDemo ", 40, "="));
		 System.out.println ("单词处理功能");
		 String str1 = "wOrD";
		 String str2 = "ghj\nui\tpo";
		 
		 System.out.println (WordUtils.capitalize (str1) ); //首字母大写
		 System.out.println (WordUtils.capitalizeFully (str1) ); //首字母大写其它字母小写
		 
		 char[] ctrg = {'.'};
		 System.out.println (WordUtils.capitalizeFully ("i aM.fine", ctrg) ); //在规则地方转换
		 System.out.println (WordUtils.initials (str1) ); //获取首字母
		 System.out.println (WordUtils.initials ("Ben John Lee", null) ); //取每个单词的首字母
		
		 char[] ctr = {' ', '.'};
		 System.out.println (WordUtils.initials ("Ben J.Lee", ctr) ); //按指定规则获取首字母
		 System.out.println (WordUtils.swapCase (str1) ); //大小写逆转
		 System.out.println (WordUtils.wrap (str2, 1) ); //解析\n和\t等字符
	 }
	
	public static void main(String[] args) {
		LangDemoTest langDemo = new LangDemoTest();
		
		//langDemo.charSetDemo();
		//langDemo.charSetUtilsDemo();
		//langDemo.objectUtilsDemo();
		//langDemo.serializationUtilsDemo();
		//langDemo.randomStringUtilsDemo();
		//langDemo.stringUtilsDemo();
		//langDemo.systemUtilsDemo();
		//langDemo.classUtilsDemo();
		//langDemo.stringEscapeUtilsDemo();
		//langDemo.builderDemo();
		//langDemo.numberUtils();
		//langDemo.dateFormatUtilsDemo();
		//langDemo.validateDemo();
		langDemo.wordUtilsDemo();
	}
}
TreeMap是按key排序如果想要安装value排序怎么办呢? java
package cn.cd.sg.sort;

import java.util.TreeMap;
import java.util.Map.Entry;

public class TestTreeMap {
	public static void main(String[] args) {
		TreeMap<Person, String> treeMap = new TreeMap<Person, String>();
		treeMap.put(new Person("zhangsan",21), "90");  
		treeMap.put(new Person("lisi",33), "10");  
		treeMap.put(new Person("wangwu",22), "30");  
		treeMap.put(new Person("zhaoliu",55), "50"); 
		
		 //使用entrySet遍历map  
		for (Entry<Person, String> entry : treeMap.entrySet()) {  
		    Person person = entry.getKey();  
		    System.out.println(person);  
		}
	}
}




package cn.cd.sg.sort;

public class Person implements Comparable<Person>{

	private String name;  
    private int age;
    	
    
    
    
	public Person(String name, int age) {
		this.name = name;
		this.age = age;
	}
	
	
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}


	@Override
	public int compareTo(Person o) {
		if (this.age > o.age) {
			return -1;
		}else if (this.age == o.age) {
			return 0;
		}else {
			return 1;
		}
		
//		if (this.name.equals(o.name)) {
//			return 0;
//		}else if (!this.name.equals(o.name)) {
//			return -1;
//		}else {
//			return 1;
//		}
	}


	@Override
	public String toString() {
		return "Person [age=" + age + ", name=" + name + "]";
	}


	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + age;
		result = prime * result + ((name == null) ? 0 : name.hashCode());
		return result;
	}
	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Person other = (Person) obj;
		if (age != other.age)
			return false;
		if (name == null) {
			if (other.name != null)
				return false;
		} else if (!name.equals(other.name))
			return false;
		return true;
	}
}




package cn.cd.sg.sort;

import java.util.Comparator;
import java.util.TreeMap;

public class TestTreeMap2 {
	
	public static void main(String[] args) {
		
		TreeMap<Person2, String> map2 = new TreeMap<Person2, String>(new Comparator<Person2>() {
			
			@Override
			public int compare(Person2 o1, Person2 o2) {
				if (o1.getAge()>o2.getAge()) {  
					return -1;  
				}else if (o1.getAge()<o2.getAge()) {  
					return 1;  
				}  
				return 0;  
			}
		});
		 map2.put(new Person2("aaa",21), "90");  
		 map2.put(new Person2("bbb",33), "10");  
		 map2.put(new Person2("ccc",22), "30");  
		 map2.put(new Person2("ddd",55), "50");  
		 //通过keySet遍历map 如果只要获取值直接通过map2.values  
		 for(Person2 key : map2.keySet()){  
		     System.out.println(key.getName()+" "+key.getAge());  
		 }  
	}
	
}



package cn.cd.sg.sort;

public class Person2 {
	private String name;
	private int age;

	public Person2(String name, int age) {
		this.age = age;
		this.name = name;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}
}



package cn.cd.sg.sort;

import java.util.Arrays;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import java.util.Map.Entry;

public class TestTreeMap3 {
	
	
	@SuppressWarnings("unchecked")
	public static Map.Entry<String,Integer>[] getSortedHashtableByValue(Map map){
		Set set = map.entrySet();
		Map.Entry<String, Integer>[] entries =  (Entry<String, Integer>[]) set.toArray(new Map.Entry[set.size()]);
		Arrays.sort(entries,new Comparator() {
			@Override
			public int compare(Object arg0, Object arg1) {
				Long key1 = Long.valueOf(((Map.Entry) arg0).getValue().toString());  
				Long key2 = Long.valueOf(((Map.Entry) arg1).getValue().toString());  
				return key1.compareTo(key2);
			}  
	    });
		
		return entries; 
	}
	
	
	public static void main(String[] args) {
	    Map<String, Integer> score = new HashMap<String, Integer>();  
	    score.put("yzq", 21);  
	    score.put("yzh", 23);  
	    score.put("yhf", 11);  
	    score.put("ysq", 45);  
	    Map.Entry<String, Integer>[] entries = getSortedHashtableByValue(score);  
	    for (Entry<String, Integer> entry : entries) {  
	        String key = entry.getKey();  
	        Integer value = entry.getValue();  
	        System.out.println(key+":"+value);  
	    }  
	}
}
Parameter java
package com.supinfo.core.web;

import java.util.HashMap;

/**
* 描述:用于MyBatis参数  传递封转  Map
* 项目名称:jnschool2   
* 类名称:Parameter   
* 创建人:孙刚   
* 创建时间:2014-2-25 上午10:21:03   
* 修改人1:xxx     
* 修改时间1:xxxx-xx-xx 
* 修改备注:   
* @version  1.0
 */
public class Parameter extends HashMap<String, Object>{

	private static final long serialVersionUID = -2912662164421350185L;
		
	/**
	* 描述  : 创建参数
	* 方法名: createParameter
	* 创建人:孙刚   
	* 创建时间:2014-2-25 上午10:24:09
	* @param key
	* @param value
	* @return :Parameter
	 */
	public static Parameter createParameter(String key,Object value){
		return new Parameter().addParameter(key, value);
	}
	
	/**
	 * 
	* 描述  : 用来封装多个参数, 并实现连接操作 
	* 方法名: addParameter
	* 创建人:孙刚   
	* 创建时间:2014-2-25 上午10:25:34
	* @param key
	* @param value
	* @return  
	* @return :Parameter
	 */
	public Parameter addParameter(String key,Object value){
		this.put(key, value);
		return this;
	}
}
SVN windows服务自动开启 java
//创建 SVN windows服务自动开启

binpath是你SVN服务端 安装位置

-r 是指你资源库指定目录

sc create MySVNServer binpath= "D:/svnService/Subversion/bin/svnserve.exe --service -r D:/svnService/svnRepoRoot/jieneng"  
displayname= "SVNService" depend= Tcpip start= auto
JAVA 备份数据库 java
package cn.cd.sg.test.qita2;

import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Date;

public class BackupMysql {
	
	/*
	 * 数据库用户名
	 */
	private String username;
	private String password;// 数据库密码
	private String dbname;// 需要备份的数据库名
	private String ip = "localhost"; //主机IP 
	private String charset = "utf-8";//编码格式
	private String backupPath; // 存放备份文件的路径
	private String mysqlpath; //mysql安装位置

	private String stmt;
	
	
	public BackupMysql(String username, String password, String dbname,
			String ip, String charset,String mysqlpath,String backupPath) {
		
		this.username = username;
		this.password = password;
		this.dbname = dbname;
		if (ip == null || ip.equals("")){
			this.ip = "localhost";
		}else{
			this.ip = ip;
		}
		if (charset == null || charset.equals("")){
			this.charset = " "; 
		}else{
			this.charset = " --default-character-set=" + charset;
		}
		this.mysqlpath = mysqlpath;
		this.backupPath = this.getRandomFileName(backupPath);
		
		this.stmt = mysqlpath + "\\mysqldump " + this.dbname+ " -h "
				+ this.ip + " -u" + this.username + " -p" + this.password
				+ this.charset + " --result-file=" + this.backupPath;
	}

	
	
	public boolean run() {
		boolean run_result = false;
		try {
			Runtime.getRuntime().exec(this.stmt);
			run_result = true;
		} catch (Exception e) {
			e.printStackTrace();
		}
		return run_result;
	}
	
	
	public String getRandomFileName(String backupPath){
		Date now = new Date();
		SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
		String random = format.format(now);
		String dbName = random + ".sql";
		File file = new File(backupPath);
		if (!file.exists()) {
			file.mkdirs();
		}
		dbName = backupPath + File.separator + dbName;
		return dbName;
	}
	
	
	
	 public static void main(String[] args){
		 	BackupMysql backup=new BackupMysql("root","root","jnschool",null,"utf8","C:\\Program Files\\MySQL\\MySQL Server 5.5\\bin","d:\\db\\dbBack");
	        boolean result = backup.run();
	        if(result)
	            System.out.println("备份成功");        

	    }
}
ZipUtils2 java
package cn.cd.sg.zip.utils;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Date;
import java.util.Enumeration;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
import java.util.zip.ZipOutputStream;

import org.apache.log4j.Logger;

/**
* @Description:文件 压缩、解压工具(主要是 使用的java.util.zip.*工具)
* 项目名称:utils   
* 类名称:ZipUtils2   
* 创建人:孙刚   
* 创建时间: 
* 修改人1:xxx     
* 修改时间1:xxxx-xx-xx 
* 修改备注:   
* @version  1.0
 */
public class ZipUtils2 {
	
	private static final int BUFFER = 2048;

	private final static Logger logger = Logger.getLogger(ZipUtils2.class);
	/**
	* @Description: 把一个zip文件解压在一个指定的目录中
	* 注意:该解压后的目录,已经去掉了zip包的根目录
	* 方法名: zipToFolder
	* @param : @param zFile
	* @param : @param folder
	* @return void 
	* @throws
	 */
	public static void zipToFolder(File zFile, String folder) throws Exception{
		
		String baseDir = folder;
		ZipFile zfile = new ZipFile(zFile);
		Enumeration<?> zList = zfile.entries();
		ZipEntry ze = null;
		OutputStream os = null;
		InputStream is = null;
		try {
			while (zList.hasMoreElements()){
				ze = (ZipEntry) zList.nextElement();
				if (ze.isDirectory()) {
					logger.debug("Dir: " + ze.getName() + " skipped..");
					continue;
				}
				os =  new BufferedOutputStream(new FileOutputStream(getRealFileName(baseDir,ze.getName())));
				is = new BufferedInputStream(zfile.getInputStream(ze));
				int readLen = 0;
				int buffSize = 1024;
				byte[] buf = new byte[buffSize];
				while ((readLen = is.read(buf, 0, BUFFER)) != -1){
					os.write(buf, 0, readLen);
				}	
			}
		} catch (Exception e) {
			
		}finally{
			if (is != null)
			{
				is.close();
			}
			if (os != null)
			{
				os.close();
			}
		}
	}
	/**
	* @Description: 将文件夹filesFolder的内容打包到zipFilePath路径,绝对路径
	* 方法名: getCompressToZip</p>
	* @param :filesFolder  要打包的
	* @param :zipFilePath  打包到哪里
	* @param :zipFileName  打包名字
	* @return File    返回类型
	* @throws
	 */
	public static File getCompressToZip(String filesFolder,String zipFilePath,String zipFileName){
		
		File baseFolder = new File(filesFolder);
		ZipOutputStream zos = null;
		String _zipFileName = zipFileName + ".zip";
		File zipFile = new File(zipFilePath, _zipFileName);
		try {
			if (!zipFile.exists()) {
				File parentfolder = zipFile.getParentFile();
				if (!parentfolder.exists()){
					parentfolder.mkdirs();
				}
				zipFile.createNewFile();
			}
			zos = new ZipOutputStream(new FileOutputStream(zipFile));
			// 将文件夹压缩为的zip文件, 去掉第一层目录
			File[] listFiles = baseFolder.listFiles();
			int listFilesSize = listFiles.length;
			for (int i = 0; i < listFilesSize; i++) {
				zipFiles(zos, listFiles[i], "");
			}
			
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
			if (zos != null) {
				try {
					zos.flush();
					zos.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
		return zipFile;
	}
	
	/**
	* @Description: 定义压缩文件及目录为zip文件的方法
	* 方法名: zipFiles
	* @param :zos
	* @param :file
	* @return void   
	* @throws
	 */
	public static void zipFiles(ZipOutputStream zos, File file, String baseDir) {
		FileInputStream in = null;
		String fileName = file.getName();
		
		try {
			// 判断File是否为目录
			if (file.isDirectory()) {
				// 获取file目录下所有文件及目录,作为一个File数组返回
				File[] files = file.listFiles();
				baseDir =  baseDir.length() == 0 ? "" : baseDir;
				String entryName = baseDir + fileName + "/";
				zos.putNextEntry(new ZipEntry(entryName));
				int subFileSize = files.length;
				for (int i = 0; i < subFileSize; i++) {
					zipFiles(zos, files[i], entryName);
				}
			}else {
				zos.putNextEntry(new ZipEntry(baseDir + fileName));
				in = new FileInputStream(file);
				int lenth = 0;
				int buffSize = 1024;
				byte[] buff = new byte[buffSize];
				while ((lenth = in.read(buff, 0, buffSize)) != -1) {
					zos.write(buff, 0, lenth);
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
			if (in != null){
				try {
					in.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
	}
	
	/**
	* @Description:给定根目录,返回一个相对路径所对应的实际文件名. 注意:该解压后的目录,已经去掉了其根目录
	* 方法名: getRealFileName
	* @param :baseDir 指定根目录
	* @param :absFileName  相对路径名,来自于ZipEntry中的name
	* @return File 
	* @throws
	 */
	public static File getRealFileName(String baseDir, String absFileName){
		String[] dirs = absFileName.split("/");
		File ret = new File(baseDir);
		
		if (dirs.length > 1) {
			for (int i = 0; i < dirs.length; i++) {
				ret = new File(ret, dirs[i]);
			}
		}
		if (!ret.exists()) {
			ret.mkdirs();
		}
		
		ret = new File(ret, dirs[dirs.length - 1]);
		
		return ret;
	}
	
	
	public static void main(String[] args) {
		Date d1 = new Date();
		try {
			getCompressToZip("D:\\test1", "E:\\test2", "aaa");
			
			Thread.sleep(2000);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		Date d2 = new Date();
		System.out.println(d2.getTime() - d1.getTime() / 1000 + "s");
	}
}
ZipUtils java
package cn.cd.sg.zip.utils;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Enumeration;
import java.util.zip.CRC32;
import java.util.zip.CheckedOutputStream;

import org.apache.tools.zip.ZipEntry;
import org.apache.tools.zip.ZipFile;
import org.apache.tools.zip.ZipOutputStream;

/**
* @Description:文件 压缩、解压工具(主要是 使用的org.apache.tools.zip.*工具)
* 项目名称:utils   
* 类名称:ZipUtils   
* 创建人:孙刚   
* 创建时间:
* 修改人1:xxx     
* 修改时间1:xxxx-xx-xx 
* 修改备注:   
* @version  1.0
 */
public class ZipUtils {
	
	public static final String FILE_SEPARATOR = System.getProperty("file.separator");
	
	
	/**
	* @Description: 压缩一个文件
	* 方法名: zipFile
	* @param :filePath  文件路径,  
	* @param :zipPath  压缩到的指定位置
	* @return boolean
	 */
	public static boolean zipFile(String filePath,String zipPath){
		
		BufferedReader in = null;
		ZipOutputStream out = null;
		
		try {
			File file = new File(filePath);
			in = new BufferedReader(new InputStreamReader(new FileInputStream(filePath),"UTF-8"));
			FileOutputStream f =new FileOutputStream(zipPath);
			CheckedOutputStream checkedOutputStream = new CheckedOutputStream(f, new CRC32());
			out = new ZipOutputStream(new BufferedOutputStream(checkedOutputStream));
			
			int c ;
			
			out.putNextEntry(new ZipEntry(file.getName()));
			
			while ((c = in.read()) != -1) {
				out.write(c);
			}
		} catch (Exception e) {
			 e.printStackTrace();
             return false;
		}finally{
			try {
				 if(in!=null) in.close();				      
				 if(out!=null)  out.close();
			} catch (IOException e) {				
				e.printStackTrace();				
			}  
		}
		return true;
	}
	
	/**
	* @Description:  将指定的文件解压缩到指定的文件夹,解压后的文件夹目录和给定的压缩文件名相同.
	* 方法名: unZipFile
	* @param :zipFilePath 压缩文件全路径
	* @param : unZipDirectory   指定解压位置路径
	* @return boolean  
	 */
	public static boolean unZipFile(String zipFilePath, String unZipDirectory)throws IOException {
		
		ZipFile zipFile = new ZipFile(zipFilePath);
		Enumeration<?> entries = zipFile.getEntries();
		if (null == entries) {
			return false;
		}
		while (entries.hasMoreElements()) {
			ZipEntry zipEntry = (ZipEntry)entries.nextElement();
			File file = new File(unZipDirectory + FILE_SEPARATOR + zipEntry.getName());
			if (zipEntry.isDirectory()) {
				if (!file.exists() && !file.mkdirs())
					throw new IOException("Couldn't create directory: " + file);
			}else {
				BufferedInputStream is = null;
				BufferedOutputStream os = null;
				
				try {
					is = new BufferedInputStream(zipFile.getInputStream(zipEntry));
					
					File destDir = file.getParentFile();
					if (!destDir.exists() && !destDir.mkdirs()) {
						throw new IOException("Couldn't create dir " + destDir);
					}
					
					os = new BufferedOutputStream(new FileOutputStream(file));
					
					int b = -1;
					while ((b = is.read()) != -1) {
						os.write(b);
					}
					
				} catch (Exception e) {
					e.printStackTrace();
				}finally{
					if (is != null)
						is.close();
					if (os != null)
						os.close();
				}
			}
		}
		zipFile.close();
		return true;
	}
	
	/**
	* @Description:压缩一个  目录
	* 方法名: zipDirectory
	* @param :dir  压缩的目录
	* @param :zipPath  压缩到的指定位置
	* @return boolean  
	* @throws
	 */
	public static boolean zipDirectory(String dir,String zipPath ){
		
		ZipOutputStream out = null;
		try {
			File dirFile = new File(dir);
			if(!dirFile.isDirectory()){
				return false;	
			}
			FileOutputStream f = new FileOutputStream(zipPath);
			CheckedOutputStream ch = new CheckedOutputStream(f,new CRC32());
			out = new ZipOutputStream(new BufferedOutputStream(ch));
			
			zip(out, dirFile, "");
			
		} catch (Exception e) {
			 e.printStackTrace();
             return false;
		}finally{
			 try {						      
				 if(out!=null)  out.close();				 
			} catch (IOException e) {				
				e.printStackTrace();				
			}   
		}
		return true;
	}
	
	
	private static void zip(ZipOutputStream out,File f,String base)throws Exception{
		System.out.println("Zipping  "+f.getName());
		BufferedInputStream in = null;
		try {
			if (f.isDirectory()) {
				File[] fl = f.listFiles();
				out.putNextEntry(new ZipEntry(base + "/"));
				base = base.length() == 0 ? "" : base + "/";
				for (int i = 0;i < fl.length ;i++ )	{
					zip(out,fl[i],base+fl[i].getName());
				}
			}else {
				out.putNextEntry(new org.apache.tools.zip.ZipEntry(base));
				FileInputStream is = new FileInputStream(f);
				//修改BUG!二进制输出采用buffered
				in = new BufferedInputStream(is);
				int b;
				while ((b=in.read()) != -1){
					out.write(b);
				}
			}
		} catch (Exception e) {
			
		}finally{
			if (null != in) {
				in.close();
			}
		}
	}
	
	 public static void main(String[] args){
	     //	boolean f = zipFile("d:/计量设备.xls","d:/计量设备.zip");
	         //boolean f = zipDirectory("D:/","d:/计量设备.zip");
	        
	         //System.out.println(f);
			 try {
				 unZipFile("d:/计量设备.zip", "D:\\");
				//zipDirectory("F:\\list","F:\\list.zip");
			} catch (Exception e) {			
				e.printStackTrace();			
			}
	         
		 }
}
Validate java
package cn.cd.sg.validate.utils;

import java.util.Collection;
import java.util.Map;

import org.apache.log4j.Logger;

import cn.cd.sg.collection.utils.CollectionUtils;
import cn.cd.sg.object.utils.ObjectUtils;
import cn.cd.sg.string.utils.StringUtils;
public class Validate {
	
	/**
	 * log4j DEBUG输出级别
	 */
	public static final int DEBUG = 1;

	/**
	 * log4j INFO输出级别
	 */
	public static final int INFO = 2;

	/**
	 * log4j ERROR输出级别
	 */
	public static final int ERROR = 3;

	/**
	 * log4j WARN输出级别
	 */
	public static final int WARN = 4;

	
	/**
	* 描述  : (这里用一句话描述这个方法的作用)
	* 方法名: isTrue
	* 创建人:孙刚   
	* 创建时间:2014-1-21 下午05:03:31
	* @param expression
	* @param message  
	* @return :void
	 */
	public static void isTrue(boolean expression, String message) {
		if (!expression) {
			throw new IllegalArgumentException(message);
		}
	}
	/**
	* 描述  : (这里用一句话描述这个方法的作用)
	* 方法名: isTrue
	* 创建人:孙刚   
	* 创建时间:2014-1-21 下午05:03:36
	* @param expression  
	* @return :void
	 */
	public static void isTrue(boolean expression) {
		isTrue(expression, "[Assertion failed] - this expression must be true");
	}
	/**
	* 描述  : (这里用一句话描述这个方法的作用)
	* 方法名: isNull
	* 创建人:孙刚   
	* 创建时间:2014-1-21 下午05:03:40
	* @param object
	* @param message  
	* @return :void
	 */
	public static void isNull(Object object, String message) {
		if (object != null) {
			throw new IllegalArgumentException(message);
		}
	}
	/**
	* 描述  : (这里用一句话描述这个方法的作用)
	* 方法名: isNull
	* 创建人:孙刚   
	* 创建时间:2014-1-21 下午05:03:44
	* @param object  
	* @return :void
	 */
	public static void isNull(Object object) {
		isNull(object, "[Assertion failed] - the object argument must be null");
	}
	/**
	* 描述  : (这里用一句话描述这个方法的作用)
	* 方法名: notNull
	* 创建人:孙刚   
	* 创建时间:2014-1-21 下午05:03:50
	* @param object
	* @param message  
	* @return :void
	 */
	public static void notNull(Object object, String message) {
		if (object == null) {
			throw new IllegalArgumentException(message);
		}
	}
	/**
	* 描述  : (这里用一句话描述这个方法的作用)
	* 方法名: notNull
	* 创建人:孙刚   
	* 创建时间:2014-1-21 下午05:03:56
	* @param object  
	* @return :void
	 */
	public static void notNull(Object object) {
		notNull(object, "[Assertion failed] - this argument is required; it must not be null");
	}
	/**
	* 描述  : (这里用一句话描述这个方法的作用)
	* 方法名: hasLength
	* 创建人:孙刚   
	* 创建时间:2014-1-21 下午05:04:00
	* @param text
	* @param message  
	* @return :void
	 */
	public static void hasLength(String text, String message) {
		if (!StringUtils.hasLength(text)) {
			throw new IllegalArgumentException(message);
		}
	}
	/**
	 * 
	* 描述  : (这里用一句话描述这个方法的作用)
	* 方法名: hasLength
	* 创建人:孙刚   
	* 创建时间:2014-1-21 下午05:04:07
	* @param text  
	* @return :void
	 */
	public static void hasLength(String text) {
		hasLength(text,"[Assertion failed] - this String argument must have length; it must not be null or empty");
	}
	/**
	* 描述  : (这里用一句话描述这个方法的作用)
	* 方法名: hasText
	* 创建人:孙刚   
	* 创建时间:2014-1-21 下午05:04:15
	* @param text
	* @param message  
	* @return :void
	 */
	public static void hasText(String text, String message) {
		if (!StringUtils.hasText(text)) {
			throw new IllegalArgumentException(message);
		}
	}
	/**
	* 描述  : (这里用一句话描述这个方法的作用)
	* 方法名: hasText
	* 创建人:孙刚   
	* 创建时间:2014-1-21 下午05:04:19
	* @param text  
	* @return :void
	 */
	public static void hasText(String text) {
		hasText(text,"[Assertion failed] - this String argument must have text; it must not be null, empty, or blank");
	}
	/**
	* 描述  : (这里用一句话描述这个方法的作用)
	* 方法名: doesNotContain
	* 创建人:孙刚   
	* 创建时间:2014-1-21 下午05:04:25
	* @param textToSearch
	* @param substring
	* @param message  
	* @return :void
	 */
	public static void doesNotContain(String textToSearch, String substring, String message) {
		if (StringUtils.hasLength(textToSearch) && StringUtils.hasLength(substring) &&
				textToSearch.indexOf(substring) != -1) {
			throw new IllegalArgumentException(message);
		}
	}
	/**
	* 描述  : (这里用一句话描述这个方法的作用)
	* 方法名: doesNotContain
	* 创建人:孙刚   
	* 创建时间:2014-1-21 下午05:04:34
	* @param textToSearch
	* @param substring  
	* @return :void
	 */
	public static void doesNotContain(String textToSearch, String substring) {
		doesNotContain(textToSearch, substring,"[Assertion failed] - this String argument must not contain the substring [" + substring + "]");
	}
	/**
	* 描述  : (这里用一句话描述这个方法的作用)
	* 方法名: notEmpty
	* 创建人:孙刚   
	* 创建时间:2014-1-21 下午05:04:40
	* @param array
	* @param message  
	* @return :void
	 */
	public static void notEmpty(Object[] array, String message) {
		if (ObjectUtils.isEmpty(array)) {
			throw new IllegalArgumentException(message);
		}
	}
	/**
	* 描述  : (这里用一句话描述这个方法的作用)
	* 方法名: notEmpty
	* 创建人:孙刚   
	* 创建时间:2014-1-21 下午05:04:44
	* @param array  
	* @return :void
	 */
	public static void notEmpty(Object[] array) {
		notEmpty(array, "[Assertion failed] - this array must not be empty: it must contain at least 1 element");
	}
	/**
	* 描述  : (这里用一句话描述这个方法的作用)
	* 方法名: noNullElements
	* 创建人:孙刚   
	* 创建时间:2014-1-21 下午05:04:48
	* @param array
	* @param message  
	* @return :void
	 */
	public static void noNullElements(Object[] array, String message) {
		if (array != null) {
			for (int i = 0; i < array.length; i++) {
				if (array[i] == null) {
					throw new IllegalArgumentException(message);
				}
			}
		}
	}
	/**
	* 描述  : (这里用一句话描述这个方法的作用)
	* 方法名: noNullElements
	* 创建人:孙刚   
	* 创建时间:2014-1-21 下午05:04:53
	* @param array  
	* @return :void
	 */
	public static void noNullElements(Object[] array) {
		noNullElements(array, "[Assertion failed] - this array must not contain any null elements");
	}
	/**
	* 描述  : (这里用一句话描述这个方法的作用)
	* 方法名: notEmpty
	* 创建人:孙刚   
	* 创建时间:2014-1-21 下午05:04:58
	* @param collection
	* @param message  
	* @return :void
	 */
	@SuppressWarnings("unchecked")
	public static void notEmpty(Collection collection, String message) {
		if (CollectionUtils.isEmpty(collection)) {
			throw new IllegalArgumentException(message);
		}
	}
	/**
	* 描述  : (这里用一句话描述这个方法的作用)
	* 方法名: notEmpty
	* 创建人:孙刚   
	* 创建时间:2014-1-21 下午05:05:03
	* @param collection  
	* @return :void
	 */
	@SuppressWarnings("unchecked")
	public static void notEmpty(Collection collection) {
		notEmpty(collection,
				"[Assertion failed] - this collection must not be empty: it must contain at least 1 element");
	}
	/**
	* 描述  : (这里用一句话描述这个方法的作用)
	* 方法名: notEmpty
	* 创建人:孙刚   
	* 创建时间:2014-1-21 下午05:05:09
	* @param map
	* @param message  
	* @return :void
	 */
	@SuppressWarnings("unchecked")
	public static void notEmpty(Map map, String message) {
		if (CollectionUtils.isEmpty(map)) {
			throw new IllegalArgumentException(message);
		}
	}
	/**
	* 描述  : (这里用一句话描述这个方法的作用)
	* 方法名: notEmpty
	* 创建人:孙刚   
	* 创建时间:2014-1-21 下午05:05:14
	* @param map  
	* @return :void
	 */
	@SuppressWarnings("unchecked")
	public static void notEmpty(Map map) {
		notEmpty(map, "[Assertion failed] - this map must not be empty; it must contain at least one entry");
	}
	/**
	* 描述  : (这里用一句话描述这个方法的作用)
	* 方法名: isInstanceOf
	* 创建人:孙刚   
	* 创建时间:2014-1-21 下午05:05:19
	* @param clazz
	* @param obj  
	* @return :void
	 */
	@SuppressWarnings("unchecked")
	public static void isInstanceOf(Class clazz, Object obj) {
		isInstanceOf(clazz, obj, "");
	}
	/**
	* 描述  : (这里用一句话描述这个方法的作用)
	* 方法名: isInstanceOf
	* 创建人:孙刚   
	* 创建时间:2014-1-21 下午05:05:23
	* @param type
	* @param obj
	* @param message  
	* @return :void
	 */
	@SuppressWarnings("unchecked")
	public static void isInstanceOf(Class type, Object obj, String message) {
		notNull(type, "Type to check against must not be null");
		if (!type.isInstance(obj)) {
			throw new IllegalArgumentException(message +
					"Object of class [" + (obj != null ? obj.getClass().getName() : "null") +
					"] must be an instance of " + type);
		}
	}
	/**
	* 描述  : (这里用一句话描述这个方法的作用)
	* 方法名: isAssignable
	* 创建人:孙刚   
	* 创建时间:2014-1-21 下午05:05:28
	* @param superType
	* @param subType  
	* @return :void
	 */
	@SuppressWarnings("unchecked")
	public static void isAssignable(Class superType, Class subType) {
		isAssignable(superType, subType, "");
	}
	/**
	* 描述  : (这里用一句话描述这个方法的作用)
	* 方法名: isAssignable
	* 创建人:孙刚   
	* 创建时间:2014-1-21 下午05:05:33
	* @param superType
	* @param subType
	* @param message  
	* @return :void
	 */
	@SuppressWarnings("unchecked")
	public static void isAssignable(Class superType, Class subType, String message) {
		notNull(superType, "Type to check against must not be null");
		if (subType == null || !superType.isAssignableFrom(subType)) {
			throw new IllegalArgumentException(message + subType + " is not assignable to " + superType);
		}
	}
	/**
	* 描述  : (这里用一句话描述这个方法的作用)
	* 方法名: state
	* 创建人:孙刚   
	* 创建时间:2014-1-21 下午05:05:37
	* @param expression
	* @param message  
	* @return :void
	 */
	public static void state(boolean expression, String message) {
		if (!expression) {
			throw new IllegalStateException(message);
		}
	}
	/**
	* 描述  : (这里用一句话描述这个方法的作用)
	* 方法名: state
	* 创建人:孙刚   
	* 创建时间:2014-1-21 下午05:05:42
	* @param expression  
	* @return :void
	 */
	public static void state(boolean expression) {
		state(expression, "[Assertion failed] - this state invariant must be true");
	}
	
	/**
	* 描述  : (这里用一句话描述这个方法的作用)
	* 方法名: log4j
	* 创建人:孙刚   
	* 创建时间:2014-1-21 下午05:05:46
	* @param className
	* @param category
	* @param msg  
	* @return :void
	 */
	public static <T> void log4j(String className, int category, String msg) {
		Logger log = Logger.getLogger(className);
		switch (category) {
		case DEBUG:
			log.debug(msg);
			break;

		case INFO:

			log.info(msg);
			break;

		case ERROR:
			log.error(msg);
			break;

		case WARN:
			log.warn(msg);
			break;

		default:
			log.debug(msg);
		}
	}
}
Global site tag (gtag.js) - Google Analytics