maven pom.xml配置及其一些插件配置 |
maven |
|
//===================================maven 将jar打包进去======================================
<build>
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<archive>
<manifest>
<mainClass>org.shirdrn.solr.cloud.index.hadoop.SolrCloudIndexer</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
//===================================jetty 配置======================================
<plugin>
<groupId>org.mortbay.jetty</groupId>
<artifactId>maven-jetty-plugin</artifactId>
<version>6.1.8</version>
<configuration>
<contextPath>/</contextPath>
<scanIntervalSeconds>10</scanIntervalSeconds>
<stopPort>9966</stopPort>
<stopKey>foo</stopKey>
<connectors>
<connector implementation="org.mortbay.jetty.nio.SelectChannelConnector">
<port>8888</port>
<maxIdleTime>60000</maxIdleTime>
</connector>
</connectors>
</configuration>
</plugin>
//===================================maven-war-plugin 配置======================================
<plugin>
<inherited>true</inherited>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<configuration>
<warName>blank</warName>
<webappDirectory>${project.build.directory}/custom-mvc</webappDirectory>
</configuration>
<executions>
<execution>
<phase>install</phase>
<goals>
<goal>war</goal>
</goals>
</execution>
</executions>
</plugin>
//===================================maven-Spring 配置======================================
<spring.version>3.2.8.RELEASE</spring.version>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-expression</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc-portlet</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-oxm</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jms</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${spring.version}</version>
<scope>test</scope>
</dependency>
//===================================maven- 其他 Jar 配置======================================
<!-- �?用于 自动生成 getter �?setter方法 直接 �?@Setter -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>0.11.4</version>
</dependency>
<!-- Aspectj -->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>1.7.0</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.7.0</version>
</dependency>
<!-- log base JAR -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.7</version>
</dependency>
<dependency>
<groupId>com.thoughtworks.xstream</groupId>
<artifactId>xstream</artifactId>
<version>1.4.7</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.2.3</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient-cache</artifactId>
<version>4.2.3</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpcore</artifactId>
<version>4.2.3</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpcore-nio</artifactId>
<version>4.2.3</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpmime</artifactId>
<version>4.2.3</version>
</dependency>
<dependency>
<groupId>com.mortennobel</groupId>
<artifactId>java-image-scaling</artifactId>
<version>0.8.5</version>
</dependency>
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.20</version>
</dependency>
<dependency>
<groupId>oro</groupId>
<artifactId>oro</artifactId>
<version>2.0.8</version>
</dependency>
<dependency>
<groupId>net.sf.json-lib</groupId>
<artifactId>json-lib</artifactId>
<version>2.2.2</version>
<classifier>jdk15</classifier>
</dependency>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>16.0.1</version>
</dependency>
<dependency>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
<version>1.4.7</version>
</dependency>
|
spring-security-3.1 |
|
|
//Spring 配置
<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/security"
xmlns:b="http://www.springframework.org/schema/beans" xmlns:beans="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-3.1.xsd">
<http pattern="/manager/login.jsp*" security="none"/>
<http pattern="/manager/loggedout.jsp" security="none"/>
<!--<http pattern="/manager/addAdmin" security="none"/>-->
<http access-denied-page="/manager/login.jsp?errorcode=true">
<!-- 则表示只有拥有对应的角色才能访问. -->
<intercept-url pattern="/manager/**" access="ROLE_ADMIN,ROLE_USER_ENABLE,ROLE_USER_RESETPWD,ROLE_ADMIN_UPDATE,ROLE_USER_DISABLE,ROLE_ADMIN_DELETE,ROLE_ADMIN_ADD,ROLE_GROUP_UPDATE,ROLE_GROUP_DELETE,ROLE_GROUP_BATCHDELETE,ROLE_GROUP_ADD,ROLE_SETTINGS,ROLE_ASSIGNROLE,ROLE_STATION_MANAGER_LOOK,ROLE_STATION_MANAGER_SELECT,ROLE_STATION_MANAGER_ADD,ROLE_STATION_MANAGER_UPDATE,ROLE_STATION_MANAGER_DELETE,ROLE_EQUIPMENT_MANAGER_LOOK,ROLE_EQUIPMENT_MANAGER_SELECT,ROLE_EQUIPMENT_MANAGER_ADD,ROLE_EQUIPMENT_MANAGER_UPDATE,ROLE_EQUIPMENT_MANAGER_DELETE,ROLE_STATUS_LOOK,ROLE_STATUS_BASEDATA_LOOK,ROLE_STATUS_BASEEM_LOOK,ROLE_STATUS_CTRL_COMMAND_LOOK,ROLE_STATUS_BASEDATA_SELECT,ROLE_STATUS_BASEDATA_REMOTE_ON,ROLE_STATUS_BASEDATA_REMOTE_OFF,ROLE_STATUS_BASEDATA_AC1_ON,ROLE_STATUS_BASEDATA_AC1_OFF,ROLE_STATUS_BASEDATA_JN_ON,ROLE_STATUS_BASEDATA_JN_OFF,ROLE_STATUS_BASEDATA_FAN1_ON,ROLE_STATUS_BASEDATA_FAN1_OFF,ROLE_STATUS_BASEDATA_COLLECT,ROLE_STATUS_BASEEM_SELECT,ROLE_STATUS_CTRL_COMMAND_SELECT,ROLE_STATUS_CTRL_COMMAND_DELETE,ROLE_JN_POLICY_LOOK,ROLE_JN_POLICY_STATION_SELECT,ROLE_JN_POLICY_STATION_ADD,ROLE_JN_POLICY_STATION_EXECUTE,ROLE_JN_POLICY_STATION_UPDATE,ROLE_JN_POLICY_MANAGER_UPDATE,ROLE_JN_POLICY_MANAGER_ADD,ROLE_JN_POLICY_MANAGER_SELECT,ROLE_JN_POLICY_ALLOCATION_LOOK,ROLE_JN_POLICY_STATION_LOOK,ROLE_JN_POLICY_MANAGER_LOOK,ROLE_JN_POLICY_ALLOCATION_SELECT,ROLE_WARN_MANAGER_LOOK,ROLE_WARN_NEW_LOOK,ROLE_WARN_HISTORY_LOOK,ROLE_WARN_NEW_SELECT,ROLE_WARN_NEW_DETAIL,ROLE_WARN_HISTORY_SELECT,ROLE_WARN_HISTORY_DETAIL,ROLE_WARN_NOTIFY_LOOK,ROLE_WARN_NOTIFY_SELECT,ROLE_WARN_NOTIFY_SET,ROLE_WARN_NOTIFY_BATCH_DELETE,ROLE_WARN_NOTIFY_UPDATE,ROLE_WARN_NOTIFY_RECEIVER_LOOK,ROLE_WARN_NOTIFY_RECEIVER_SELECT,ROLE_WARN_NOTIFY_RECEIVER_ADD,ROLE_WARN_NOTIFY_RECEIVER_UPDATE,ROLE_WARN_NOTIFY_RECEIVER_DELETE,ROLE_COUNT_LOOK,ROLE_COUNT_SUM,ROLE_COUNT_ACCOUNTING,ROLE_COUNT_TREND,ROLE_COUNT_YOY,ROLE_COUNT_TOP,ROLE_COUNT_EFFECT,ROLE_WARN_COUNT_LOOK,ROLE_WARN_BATCH_DELETE"/>
<!-- 表示通过 /manager/login.jsp 这个映射进行登录 -->
<!-- 如果验证失败则返回一个URL:/manager/login.jsp?error=true -->
<!-- 如果登录成功则默认指向:/manager/welcome.jsp -->
<form-login login-page="/manager/login.jsp" login-processing-url="/j_spring_security_check" default-target-url="/manager/welcome.jsp"
authentication-failure-url="/manager/login.jsp?error=true"/>
<!-- 自定义过滤器,FORM_LOGIN_FILTER 别名 对应类 UsernamePasswordAuthenticationFilter;
该过滤器会覆盖掉 http/form-login 中的 authentication-failure-url 和 default-target-url 这两个属性 -->
<custom-filter before="FORM_LOGIN_FILTER" ref="authenticationProcessingFilter"/>
<!-- 开启session 失效功能 -->
<!-- 注销URL为:/logout -->
<!-- 注销成功后转向:/manager/loggedout.jsp -->
<logout logout-success-url="/manager/loggedout.jsp" logout-url="/logout" delete-cookies="JSESSIONID"/>
<!-- 会话管理,设置最多登录异常,error-if-maximum-exceeded = false为第二次登录就会使前一个登录失效 -->
<session-management invalid-session-url="/manager/welcome.jsp">
<concurrency-control max-sessions="1" error-if-maximum-exceeded="false" />
</session-management>
</http>
<global-method-security secured-annotations="enabled"></global-method-security>
<!-- 认证管理的几种方式 -->
<!-- 配置认证管理器 -->
<authentication-manager alias="authenticationManager">
<authentication-provider>
<!-- 密码加密方式. 常用的有md5 和 sha -->
<password-encoder hash="md5">
<salt-source user-property="username"/>
</password-encoder>
<!-- 注入dataSource验证数据库中的用户名.密码 和 权限相关 -->
<jdbc-user-service data-source-ref="dataSource"
group-authorities-by-username-query="SELECT
g.id,g.groupname,
role.role
FROM t_group AS g
LEFT OUTER JOIN t_group_role AS grouprole ON (g.id = grouprole.groupid)
LEFT OUTER JOIN t_role AS role ON (role.id = grouprole.roleid)
LEFT OUTER JOIN t_group_user AS groupuser on (g.id = groupuser.groupid)
LEFT OUTER JOIN t_admin ON (t_admin.id = groupuser.userid)
WHERE t_admin.nickname = ?"
users-by-username-query="SELECT t_admin.nickname AS username,t_admin.passwd as password,'true' AS enabled
FROM t_admin
WHERE t_admin.nickname = ?"
authorities-by-username-query="SELECT t_admin.nickname AS username,role.role as authorities
FROM t_admin
LEFT OUTER JOIN t_user_role AS userrole ON(t_admin.id = userrole.userid)
LEFT OUTER JOIN t_role AS role ON (userrole.roleid = role.id)
WHERE t_admin.nickname = ?" />
<!-- 使用固定的用户名和密码及权限来做验证.
<user-service>
<user name="admin" password="admin" authorities="ROLE_USER, ROLE_ADMIN" />
<user name="user" password="user" authorities="ROLE_USER" />
</user-service>
-->
</authentication-provider>
</authentication-manager>
<!-- 自定义消息 -->
<b:bean id="messageSource"
class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
<b:property name="basename"
value="classpath:messages_zh_CN" />
</b:bean>
<beans:bean id="authenticationProcessingFilter" class="com.supinfo.jieneng.aop.LoginUsernamePasswordAuthenticationFilter">
<beans:property name="authenticationSuccessHandler" ref="loginSuccessHandler"/>
<beans:property name="authenticationFailureHandler" ref="authenticationFailureHandler"/>
<beans:property name="authenticationManager" ref="authenticationManager"/>
</beans:bean>
<!-- 过滤 成功 -->
<beans:bean id="loginSuccessHandler" class="com.supinfo.jieneng.aop.LoginSuccessHandler">
<b:property name="defaultTargetUrl">
<b:value>/manager/welcome.jsp</b:value>
</b:property>
</beans:bean>
<!-- 过滤 失败 -->
<beans:bean id="authenticationFailureHandler" class="org.springframework.security.web.authentication.SimpleUrlAuthenticationFailureHandler">
<beans:property name="defaultFailureUrl">
<beans:value>/manager/login.jsp?error=true</beans:value>
</beans:property>
</beans:bean>
</beans:beans>
//====================================LoginSuccessHandler================================
package com.supinfo.jieneng.aop;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.web.authentication.SavedRequestAwareAuthenticationSuccessHandler;
import com.supinfo.core.base.ServiceManager;
import com.supinfo.jieneng.domains.Admin;
import com.supinfo.jieneng.domains.Log;
/**
* 处理管理员登录日志
* @author
*
*/
public class LoginSuccessHandler extends SavedRequestAwareAuthenticationSuccessHandler{
@Autowired
private ServiceManager serviceManager;
@Override
public void onAuthenticationSuccess(HttpServletRequest request,
HttpServletResponse response, Authentication authentication) throws IOException,
ServletException {
UserDetails userDetails = (UserDetails)authentication.getPrincipal();
//for(GrantedAuthority obj : userDetails.getAuthorities()){
//if(obj.getAuthority().equals("ROLE_ADMIN")){
//System.out.println("管理员 " + userDetails.getUsername() + " 登录");
Log log = new Log();
//log.setCreatedate(new Date());
log.setUserid(loginUserId(userDetails.getUsername()));
log.setContent("管理员:" + userDetails.getUsername());
log.setOperation("登录");
serviceManager.getLogService().log(log);
//}
//}
super.onAuthenticationSuccess(request, response, authentication);
}
/**
* 获取登录用户ID
*
* @return
*/
private Long loginUserId(String userName) {
// 根据用户名获取用户ID
Admin admin = serviceManager.getAdminService().findAdminByNickname(userName);
return admin.getId();
}
}
//==================================UsernamePasswordAuthenticationFilter==================================
package com.supinfo.jieneng.aop;
import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;
public class LoginUsernamePasswordAuthenticationFilter extends
UsernamePasswordAuthenticationFilter {
// @Override
// public Authentication attemptAuthentication(HttpServletRequest request,
// HttpServletResponse response) throws AuthenticationException {
// try {
// User user = new User();
// user.setNickname(request.getParameter("j_username"));
// user.setPasswd(request.getParameter("j_password"));
// if (user != null && DataUtil.isNullAndEmpty(user.getNickname())) {
// /*
// * request.getSession().setAttribute("houtaiUser", user);
// // 后台城市切换
// String path = getClass().getClassLoader()
// .getResource("signCity.xml").getPath();
// Map<String, Object> citys = null;
// if (DataUtil.isNullAndEmpty(path)) {
// //citys = UrlUtil.readyCity(path);
// }
// request.getSession().setAttribute("houtaiCitys", citys);
// */
// }
// } catch (Exception e) {
// e.printStackTrace();
// }
// return super.attemptAuthentication(request, response);
//
// }
}
//web.xml
<!-- Spring Security 过滤器配置 -->
<filter>
<filter-name>springSecurityFilterChain</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
<filter-name>springSecurityFilterChain</filter-name>
<url-pattern>/manager/*</url-pattern>
<url-pattern>/j_spring_security_check</url-pattern>
<url-pattern>/logout</url-pattern>
</filter-mapping>
|
hadoop,oracle官网下载地址 |
hadoop |
|
http://mirrors.hust.edu.cn/apache/hadoop/common/
// linux 下载
wget http://mirrors.cnnic.cn/apache/hadoop/common/hadoop-2.2.0/hadoop-2.2.0-src.tar.gz
//oracle
http://www.oracle.com/technetwork/database/enterprise-edition/downloads/index.html
|
Linux 安装mysql,jdk,nginx一些 环境变量设置 |
linux |
|
卸载rpm版的jdk:
rpm -qa|grep jdk
显示:jdk-1.6.0_31-fcs
卸载:#rpm -e --nodeps jdk-1.6.0_31-fcs
//JDK
//在/etc/profile文件最后添加
//usr/java/jdk1.7.0_51 jdk安装目录
export JAVA_HOME=/usr/java/jdk1.7.0_51
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin
//NGINX
也是在/etc/profile文件最后添加
///usr/local/nginx NGINX安装目录
export NGIINX_HOME=/usr/local/nginx
//中间用:隔开
export PATH=$PATH:$JAVA_HOME/bin:$NGIINX_HOME/sbin
//MYSQL
//在/root/.bash_profile文件最后添加
PATH=$PATH:$HOME/bin:/usr/local/mysql/bin:/usr/local/mysql/lib
export PATH
|
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['_
}
}
|
JAXB操作XML |
xml, webservice |
|
package cn.cd.sung.xml;
import java.io.StringReader;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;
import org.junit.Test;
public class TestJaxb {
@Test
public void test1() throws JAXBException{
JAXBContext ctx = JAXBContext.newInstance(Student.class);
Marshaller marshaller = ctx.createMarshaller();
Student student = new Student(1, new ClassRoom(1,"10级计算应用技术","2010"), "孙刚", 22);
marshaller.marshal(student, System.out);
}
@Test
public void test2() throws JAXBException{
String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><student><age>22</age><classRoom><grade>2010</grade><id>1</id><name>10级计算应用技术</name></classRoom><id>1</id><name>孙刚</name></student>";
JAXBContext ctx = JAXBContext.newInstance(Student.class);
Unmarshaller unmarshaller = ctx.createUnmarshaller();
Student student = (Student) unmarshaller.unmarshal(new StringReader(xml));
System.out.println(student.getName() + ", " + student.getClassRoom().getName());
}
}
|
XML DTD和Schema文件定义 |
webservice |
|
//===============================DTD:定义=============================
<?xml version="1.0" encoding="UTF-8"?>
<!ELEMENT classroom (name,grade,students+)>
//#REQUIRED必须出现
<!ATTLIST classroom id ID #REQUIRED>
<!ELEMENT name (#PCDATA)>
<!ELEMENT grade (#PCDATA)>
<!ELEMENT students (student)>
<!ELEMENT student (id,name,age)>
<!ELEMENT id (#PCDATA)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
//============================xml引入DTD文件=================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE classroom SYSTEM "classroom.dtd">
<classroom id="c1">
<name>软件技术001</name>
<grade>201</grade>
<students>
<student>
<id>s1</id>
<name>孙刚</name>
<age>20</age>
</student>
</students>
<students>
<student>
<id>s2</id>
<name>孙刚</name>
<age>20</age>
</student>
</students>
</classroom>
//==========================Schema文件定义==================
//下面定义了一些 基本的Schema的 元素 属性等.
<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.example.org/02"
xmlns:tns="http://www.example.org/02" elementFormDefault="qualified">
<element name="books">
<!-- 复杂类型 -->
<complexType>
<!--minOccurs最少出现数 maxOccurs最多出现数 -->
<sequence minOccurs="1" maxOccurs="unbounded">
<element name="book">
<complexType>
<!-- sequence 代表有顺序的 all可以不用顺序出现 -->
<sequence minOccurs="1">
<!--type 普通类型-->
<element name="bookname" type="string" />
<element name="content" type="string" />
<element name="author" type="string" />
<choice>
<element name="authors" block="#all">
<complexType>
<sequence maxOccurs="3">
<element name="author" type="string" />
</sequence>
</complexType>
</element>
</choice>
</sequence>
<!-- 定义属性 use 是否必须 optional 有没有都可以 "required" 必须有 属性定义必须在 sequence之后-->
<attribute name="id" type="int" use="required"/>
</complexType>
</element>
</sequence>
</complexType>
</element>
</schema>
//=======================XML引入Schema文件==================
<?xml version="1.0" encoding="UTF-8"?>
<book:books xmlns:book ="http://www.example.org/02"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="02.xsd">
<book:book id="1">
<book:bookname>JAVA编程思想</book:bookname>
<book:content>JAVA</book:content>
<book:author>1</book:author>
<book:authors>
<book:author>2</book:author>
</book:authors>
</book:book>
<book:book id="2">
<book:bookname>SOAP</book:bookname>
<book:content>SOAP CONTENT</book:content>
<book:author>1</book:author>
<book:authors>
<book:author>2</book:author>
</book:authors>
</book:book>
</book:books>
//======================Schema文件定义 2==================
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.example.org/03"
xmlns:tns="http://www.example.org/03"
elementFormDefault="qualified">
<!-- tns 引入本文件的 Schema 元素 -->
<!-- 元素最大化 使用 优点:结构清晰 缺点:根源不清晰 books,id,title都可以使用根节点-->
<xsd:element name="books" type="tns:bookType"/>
<xsd:element name="id" type="int"/>
<xsd:element name="title" type="string"/>
<xsd:element name="contents" type="string"/>
<xsd:complexType name="bookType">
<xsd:sequence minOccurs="1" maxOccurs="unbounded">
<xsd:element ref="tns:id"/>
<xsd:element ref="tns:title"/>
<xsd:element ref="tns:contents"/>
</xsd:sequence>
</xsd:complexType>
</xsd:schema>
//======================Schema文件定义 3==================
<?xml version="1.0" encoding="UTF-8"?>
<schema
xmlns="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.example.org/04"
xmlns:tns="http://www.example.org/04"
elementFormDefault="qualified">
<!--一个 根节点 通过 simpleType 完成重用-->
<element name="person" type="tns:personType"/>
<complexType name="personType">
<sequence minOccurs="1" maxOccurs="unbounded">
<element name="name" type="string"/>
<element name="age" type="tns:ageType"/>
<element name="email" type="tns:emailType"/>
</sequence>
<attribute name="sex" type="tns:sexType"/>
</complexType>
<simpleType name="ageType">
<restriction base="int">
<!-- 最小包含 1 -->
<minInclusive value="1"/>
<maxInclusive value="150"/>
</restriction>
</simpleType>
<simpleType name="sexType">
<restriction base="string">
<enumeration value="男"/>
<enumeration value="女"/>
</restriction>
</simpleType>
<simpleType name="emailType">
<restriction base="string">
<!-- 正则验证 -->
<pattern value="(\w+\.*)*\w+@\w+\.[A-Za-z]{2,6}"></pattern>
<!-- 最小长度 -->
<minLength value="6"/>
<!-- 最大长度 -->
<maxLength value="255"/>
</restriction>
</simpleType>
</schema>
|
测试一片文章各个字符出现了多少次 |
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) );
}
|
wsdl分析 |
webservice |
|
This XML file does not appear to have any style information associated with it. The document tree is shown below.
<!--
Published by JAX-WS RI at http://jax-ws.dev.java.net. RI's version is JAX-WS RI 2.1.6 in JDK 6.
-->
<!--
Generated by JAX-WS RI at http://jax-ws.dev.java.net. RI's version is JAX-WS RI 2.1.6 in JDK 6.
-->
<definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://test.webservice.sung.cd.cn/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas.xmlsoap.org/wsdl/" targetNamespace="http://test.webservice.sung.cd.cn/" name="MySeviceImplService">
<types>
<xsd:schema>
<xsd:import namespace="http://test.webservice.sung.cd.cn/" schemaLocation="http://localhost:1234/ns?xsd=1"/>
</xsd:schema>
</types>
<message name="minus">
<part name="parameters" element="tns:minus"/>
</message>
<message name="minusResponse">
<part name="parameters" element="tns:minusResponse"/>
</message>
<message name="add">
<part name="parameters" element="tns:add"/>
</message>
<message name="addResponse">
<part name="parameters" element="tns:addResponse"/>
</message>
<portType name="IMyService">
<operation name="minus">
<input message="tns:minus"/>
<output message="tns:minusResponse"/>
</operation>
<operation name="add">
<input message="tns:add"/>
<output message="tns:addResponse"/>
</operation>
</portType>
<binding name="MySeviceImplPortBinding" type="tns:IMyService">
<soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/>
<operation name="minus">
<soap:operation soapAction=""/>
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
</operation>
<operation name="add">
<soap:operation soapAction=""/>
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
</operation>
</binding>
<service name="MySeviceImplService">
<port name="MySeviceImplPort" binding="tns:MySeviceImplPortBinding">
<soap:address location="http://localhost:1234/ns"/>
</port>
</service>
</definitions>
//=========================================节点分析说明==================================================
//types:用来定义访问的类型
<types>
<xsd:schema>
<xsd:import namespace="http://test.webservice.sung.cd.cn/" schemaLocation="http://localhost:1234/ns?xsd=1"/>
</xsd:schema>
</types>
//message:SOAP
<message name="minus">
<part name="parameters" element="tns:minus"/>
</message>
<message name="minusResponse">
<part name="parameters" element="tns:minusResponse"/>
</message>
<message name="add">
<part name="parameters" element="tns:add"/>
</message>
<message name="addResponse">
<part name="parameters" element="tns:addResponse"/>
</message>
//portType:指明服务器的接口,并通过operation 绑定相应的in和out的消息:其中in表示参数,out表示返回值
<portType name="IMyService">
<operation name="minus">
<input message="tns:minus"/>
<output message="tns:minusResponse"/>
</operation>
<operation name="add">
<input message="tns:add"/>
<output message="tns:addResponse"/>
</operation>
</portType>
//binding : 指定传递消息所使用的格式
<binding name="MySeviceImplPortBinding" type="tns:IMyService">
<soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/>
<operation name="minus">
<soap:operation soapAction=""/>
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
</operation>
<operation name="add">
<soap:operation soapAction=""/>
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
</operation>
</binding>
//service : 指定服务器所发布的名称
<service name="MySeviceImplService">
<port name="MySeviceImplPort" binding="tns:MySeviceImplPortBinding">
<soap:address location="http://localhost:1234/ns"/>
</port>
</service>
|
JDK 原生webservice实例讲解 |
webservice |
|
package cn.cd.sung.webservice.test;
import javax.jws.WebParam;
import javax.jws.WebResult;
import javax.jws.WebService;
@WebService
public interface IMyService {
@WebResult(name="addResult")
public int add(@WebParam(name="a")int a,@WebParam(name="b")int b);
@WebResult(name="minusResult")
public int minus(@WebParam(name="a")int a,@WebParam(name="b")int b);
}
//=========================================================================
package cn.cd.sung.webservice.test;
import javax.jws.WebService;
@WebService(endpointInterface="cn.cd.sung.webservice.test.IMyService")
public class MySeviceImpl implements IMyService{
@Override
public int add(int a, int b) {
System.out.println(a + " + " + b + "=" + (a+b));
return a + b;
}
@Override
public int minus(int a, int b) {
System.out.println(a + " - " + b + "=" + (a-b));
return a - b;
}
}
//=============================发布服务端============================================
package cn.cd.sung.webservice.test;
import javax.xml.ws.Endpoint;
public class MyService {
public static void main(String[] args) {
String address = "http://localhost:1234/ns";
Endpoint.publish(address, new MySeviceImpl());
}
}
//之后可以直接在浏览器 输入http://localhost:1234/ns
//可以输入http://localhost:1234/ns?wsdl 查看wsdl文件
//=============================main 方法测试============================================
package cn.cd.sung.webservice.test;
import java.net.MalformedURLException;
import java.net.URL;
import javax.xml.namespace.QName;
import javax.xml.ws.Service;
public class TestClient {
public static void main(String[] args) throws MalformedURLException {
URL url = new URL("http://localhost:1234/ns?wsdl");
QName qName = new QName("http://test.webservice.sung.cd.cn/", "MySeviceImplService");
Service service = Service.create(url, qName);
IMyService myService = service.getPort(IMyService.class);
System.out.println(myService.add(2, 3));
}
}
//=============================通过命令导出============================================
wsimport -d d:/webservice/01/ -keep -verbose http://localhost:1234/ns?wsdl
//-d d:/webservice/01/ : 制定生成目录
//-keep : 指定是否生成.java源代码
//-verbose : 指定生成详细过程
//http://localhost:1234/ns?wsdl : 网络中的wsdl文件
//生成:
Add.java
AddResponse.java
IMyService.java
Minus.java
MinusResponse.java
MySeviceImplService.java
ObjectFactory.java
package-info.java
//直接将此代码 拷贝走实用
//=============================Main 函数测试============================================
package cn.cd.sung.webservice.test;
import java.net.MalformedURLException;
import java.net.URL;
import javax.xml.namespace.QName;
import javax.xml.ws.Service;
public class TestClient {
public static void main(String[] args) throws MalformedURLException {
//URL url = new URL("http://localhost:1234/ns?wsdl");
//QName qName = new QName("http://test.webservice.sung.cd.cn/", "MySeviceImplService");
//Service service = Service.create(url, qName);
//IMyService myService = service.getPort(IMyService.class);
//System.out.println(myService.add(2, 3));
MySeviceImplService service = new MySeviceImplService();
IMyService myService = service.getMySeviceImplPort();
System.out.println(myService.add(1, 3));
}
}
//一样效果调用服务端 webservice
|
node.js |
|
|
当正常 安装node.js后
安装supervisor 命令是:cmd 进去 你安装的node.js目录
如:E:\Program Files\Software development\nodejs
进去node_modules\npm
执行:npm install supervisor -g
安装后编写你的js文件 就会自动编译了 前提是你要用 supervisor 命令 启动该js文件
如在cmd执行 node命令 直接进去编译
>如 执行supervisor test.js
下次你再修改test.js时 就会自动编译文件了
安装 express 框架
我们要先配置npm的全局模块的存放路径以及cache的路径,例如我希望将以上两个文件夹放在NodeJS的主目录下,便在NodeJs下建立"node_global"及"node_cache"两个文件夹
npm config set prefix "C:\Program Files\nodejs\node_global"
以及
npm config set cache "C:\Program Files\nodejs\node_cache"
现在我们来装个模块试试,选择express这个比较常用的模块。同样在cmd命令行里面,输入“npm install express -g”(“-g”这个参数意思是装到global目录下,也就是上面说设置的“C:\Program Files\nodejs\node_global”里面。)
npm install -g express@3.5.0安装制定版本
最新express4.0版本中将命令工具分家出来了(项目地址:https://github.com/expressjs/generator),所以我们还需要安装一个命令工具,命令如下:
npm install -g express-generator
Jade —— 源于 Node.js 的 HTML 模板引擎
npm install -g jade
EJS全称是Embedded JavaScript.是著名的javascrip模版之一.
安装:npm install ejs -g
Nodejs基础中间件Connect
http://blog.fens.me/nodejs-connect/
安装:npm install connect -g
|
利用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();
}
}
|
Spring AOP (日志、事务、二级缓存)XML配置 |
spring |
|
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:cache="http://www.springframework.org/schema/cache"
xsi:schemaLocation="http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.1.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/cache http://www.springframework.org/schema/cache/spring-cache-3.1.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.1.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd">
<!-- 分散配置 -->
<context:property-placeholder location="classpath:jdbc.properties"/>
<context:component-scan base-package="com.atguigu.surveypark.dao.impl,com.atguigu.surveypark.service.impl,com.atguigu.surveypark.listener,com.atguigu.surveypark.struts2.action" />
<!-- 配置(主库)数据源 -->
<bean id="dataSource-main" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="${jdbc.driverclass}" />
<property name="jdbcUrl" value="${jdbc.url}" />
<property name="user" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
<property name="maxPoolSize" value="${c3p0.pool.size.max}" />
<property name="minPoolSize" value="${c3p0.pool.size.min}" />
<property name="initialPoolSize" value="${c3p0.pool.size.ini}" />
<property name="acquireIncrement" value="${c3p0.pool.size.increment}" />
</bean>
<!-- 配置从库数据源 -->
<bean id="dataSource-1" parent="dataSource-main">
<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/lsn_surveypark001_1" />
</bean>
<!-- 数据源路由器 -->
<bean id="dataSourceRouter" class="com.atguigu.surveypark.datasource.SurveyparkDataSourceRouter">
<!-- 目标数据源集合 -->
<property name="targetDataSources">
<map>
<entry key="odd" value-ref="dataSource-main" />
<entry key="even" value-ref="dataSource-1" />
</map>
</property>
<!-- 默认数据源集合 -->
<property name="defaultTargetDataSource" ref="dataSource-main" />
</bean>
<!-- 本地回话工厂bean(spring整合hibernate的核心入口) -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSourceRouter" />
<property name="configLocation" value="classpath:hibernate.cfg.xml" />
<property name="mappingDirectoryLocations">
<list>
<value>classpath:com/atguigu/surveypark/model</value>
</list>
</property>
</bean>
<!-- hibnerate事务管理器,用来在service层面上实现事务管理,而且达到平台无关性 -->
<bean id="txManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<!-- 事务通知 -->
<tx:advice id="txAdvice" transaction-manager="txManager">
<tx:attributes>
<!-- 写操作 -->
<tx:method name="save*" propagation="REQUIRED" isolation="DEFAULT"/>
<tx:method name="update*" propagation="REQUIRED" isolation="DEFAULT"/>
<tx:method name="delete*" propagation="REQUIRED" isolation="DEFAULT"/>
<tx:method name="batch*" propagation="REQUIRED" isolation="DEFAULT"/>
<tx:method name="new*" propagation="REQUIRED" isolation="DEFAULT"/>
<tx:method name="clear*" propagation="REQUIRED" isolation="DEFAULT"/>
<tx:method name="toggle*" propagation="REQUIRED" isolation="DEFAULT"/>
<tx:method name="execute*" propagation="REQUIRED" isolation="DEFAULT"/>
<tx:method name="move*" propagation="REQUIRED" isolation="DEFAULT"/>
<!-- 读操作 -->
<tx:method name="load*" propagation="REQUIRED" isolation="DEFAULT" read-only="true"/>
<tx:method name="get*" propagation="REQUIRED" isolation="DEFAULT" read-only="true"/>
<tx:method name="find*" propagation="REQUIRED" isolation="DEFAULT" read-only="true"/>
<tx:method name="*" propagation="REQUIRED" isolation="DEFAULT"/>
</tx:attributes>
</tx:advice>
<!-- 缓存管理器 -->
<bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheCacheManager">
<property name="cacheManager" ref="cacheManagerFactoryBean" />
</bean>
<!-- 缓存管理器工厂bean -->
<bean id="cacheManagerFactoryBean" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean">
<property name="configLocation" value="classpath:ehcache.xml" />
</bean>
<!-- 自定义缓存key生成器 -->
<bean id="surveyparkKeyGenerator" class="com.atguigu.surveypark.cache.SurveyparkKeyGenerator" />
<!-- 缓存通知 -->
<cache:advice id="cacheAdvice" cache-manager="cacheManager" key-generator="surveyparkKeyGenerator">
<cache:caching cache="surveyparkCache">
<cache:cacheable method="get*" />
<cache:cacheable method="load*" />
<cache:cacheable method="find*" />
<cache:cache-evict method="save*" all-entries="true" />
<cache:cache-evict method="update*" all-entries="true"/>
<cache:cache-evict method="delete*" all-entries="true"/>
<cache:cache-evict method="clear*" all-entries="true"/>
<cache:cache-evict method="toggle*" all-entries="true"/>
<cache:cache-evict method="move*" all-entries="true"/>
<cache:cache-evict method="batch*" all-entries="true"/>
<cache:cache-evict method="execute*" all-entries="true"/>
</cache:caching>
</cache:advice>
<!-- 日志记录仪 -->
<bean id="logger" class="com.atguigu.surveypark.advice.Logger" />
<!-- aop配置 -->
<aop:config>
<!-- 事务切入点通知 -->
<aop:advisor advice-ref="txAdvice" pointcut="execution(* *..*Service.*(..))" order="2"/>
<!-- 缓存切入点通知 -->
<aop:advisor advice-ref="cacheAdvice" pointcut="execution(* *..*Service.*(..))" order="0"/>
<!-- Logger切面 -->
<aop:aspect id="loggerAspect" ref="logger" order="1">
<aop:around method="record" pointcut="(execution(* *..*Service.save*(..))
or execution(* *..*Service.update*(..))
or execution(* *..*Service.delete*(..))
or execution(* *..*Service.batch*(..))
or execution(* *..*Service.new*(..))
or execution(* *..*Service.move*(..))
or execution(* *..*Service.clear*(..))
or execution(* *..*Service.toggle*(..)))
and !bean(logService)
"/>
</aop:aspect>
</aop:config>
</beans>
hibernate.cfg.xml:
<?xml version="1.0"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property>
<property name="hibernate.hbm2ddl.auto">update</property>
<property name="hibernate.show_sql">true</property>
</session-factory>
</hibernate-configuration>
jdbc.properties
jdbc.driverclass=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/survey?useUnicode=true&characterEncoding=UTF-8
jdbc.username=root
jdbc.password=root
c3p0.pool.size.max=10
c3p0.pool.size.min=2
c3p0.pool.size.ini=3
c3p0.pool.size.increment=2
ehcache.xml:
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="../config/ehcache.xsd">
<diskStore path="java.io.tmpdir"/>
<defaultCache
maxElementsInMemory="10000"
eternal="false"
timeToIdleSeconds="120"
timeToLiveSeconds="120"
overflowToDisk="true"
maxElementsOnDisk="10000000"
diskPersistent="false"
diskExpiryThreadIntervalSeconds="120"
memoryStoreEvictionPolicy="LRU"
/>
<cache name="surveyparkCache"
maxElementsInMemory="10000"
eternal="false"
timeToIdleSeconds="120"
timeToLiveSeconds="120"
overflowToDisk="true"
maxElementsOnDisk="10000000"
diskPersistent="false"
diskExpiryThreadIntervalSeconds="120"
memoryStoreEvictionPolicy="LRU"
/>
</ehcache>
<!-- 自定义缓存key生成器 -->
com.atguigu.surveypark.cache.SurveyparkKeyGenerator
package com.atguigu.surveypark.cache;
import java.lang.reflect.Method;
import org.springframework.cache.interceptor.KeyGenerator;
import com.atguigu.surveypark.util.StringUtil;
/**
* 自定义缓存key生成器
*/
public class SurveyparkKeyGenerator implements KeyGenerator{
public Object generate(Object arg0, Method arg1, Object... arg2) {
String className = arg0.getClass().getSimpleName();
String mname = arg1.getName();
String params = StringUtil.arr2Str(arg2);
String key = className + "@" + arg0.hashCode() + "." + mname + "("+params+")" ;
System.out.println(key);
return key;
}
}
Logger.java
package com.atguigu.surveypark.advice;
import java.util.Map;
import javax.annotation.Resource;
import org.aspectj.lang.ProceedingJoinPoint;
import com.atguigu.surveypark.model.Log;
import com.atguigu.surveypark.model.User;
import com.atguigu.surveypark.service.LogService;
import com.atguigu.surveypark.util.StringUtil;
import com.opensymphony.xwork2.ActionContext;
/**
* Logger
*/
public class Logger {
@Resource
private LogService logService ;
/**
* 记录
*/
public Object record(ProceedingJoinPoint pjp){
Log log = new Log();
try {
ActionContext ac = ActionContext.getContext();
//设置操作人
if(ac != null){
Map<String, Object> session = ac.getSession();
if(session != null){
User user = (User) session.get("user");
if(user != null){
log.setOperator("" + user.getId() + ":" + user.getEmail());
}
}
}
//操作名称
String mname = pjp.getSignature().getName();
log.setOperName(mname);
//操作参数
Object[] params = pjp.getArgs();
log.setOperParams(StringUtil.arr2Str(params));
//调用目标对象的方法
Object ret = pjp.proceed();
//设置操作结果
log.setOperResult("success");
//设置结果消息
if(ret != null){
log.setResultMsg(ret.toString());
}
return ret ;
} catch (Throwable e) {
log.setOperResult("failure");
log.setResultMsg(e.getMessage());
}
finally{
logService.saveEntity(log);
}
return null ;
}
}
|
linux 配置 java jar自动重启shell命令 |
linux |
|
//这个是etc/init.d/的一个初始化启动脚本文件
#!/bin/sh
#chkconfig: 2345 90 50
#description: Monitoring System, TL 2013-08-06
#Provides: probe7863
#export JAVA_HOME=/opt/jdk/jdk1.6.0_18
export PROJ_HOME=/usr/local/tomcat/fileback/20130620
cd $PROJ_HOME
#$JAVA_HOME/bin/java -jar $PROJ_HOME/Probe14.jar >$PROJ_HOME/out.file 2>&1 &
#$PROJ_HOME/start7863.sh
./start7863.sh
//这个是具体启动的start7863.sh
java -jar Probe14.jar >out.file 2>&1 &
//这个和你当前 jar 所在的是同一个目录下面
|
linux 配置Tomcat自动重启shell命令 |
linux |
|
#!/bin/sh
#chkconfig: 2345 80 90
#description:auto_run
### BEGIN INIT INFO
# Provides: tomcat
# Required-Start: $remote_fs $network
# Required-Stop: $remote_fs $network
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: The tomcat Java Application Server
RETVAL=0
export JAVA_HOME=/opt/jdk/jdk1.6.0_18
export CATALINA_HOME=/usr/local/tomcat/apache-tomcat-6.0.37
export CATALINA_BASE=/usr/local/tomcat/apache-tomcat-6.0.37
start()
{
if [ -f $CATALINA_HOME/bin/startup.sh ];
then
echo $"Starting Tomcat"
$CATALINA_HOME/bin/startup.sh
RETVAL=$?
echo " OK"
return $RETVAL
fi
}
stop()
{
if [ -f $CATALINA_HOME/bin/shutdown.sh ];
then
echo $"Stopping Tomcat"
$CATALINA_HOME/bin/shutdown.sh
RETVAL=$?
sleep 1
ps -fwwu tomcat | grep apache-tomcat|grep -v grep | grep -v PID | awk '{print $2}'|xargs kill -9
echo " OK"
# [ $RETVAL -eq 0 ] && rm -f /var/lock/...
return $RETVAL
fi
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
echo $"Restaring Tomcat"
$0 stop
sleep 1
$0 start
;;
*)
echo $"Usage: $0 {start|stop|restart}"
exit 1
;;
esac
exit $RETVAL
|
Spring framewor下载地址 |
|
|
http://repo.spring.io/release/org/springframework/spring/
http://repo.spring.io/webapp/search/artifact/?0&q=spring-framework
|
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
|
spring编程式事务管理 |
spring |
|
package com.supinfo.util;
import org.springframework.context.ApplicationContext;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.TransactionDefinition;
import org.springframework.transaction.TransactionStatus;
import org.springframework.transaction.support.DefaultTransactionDefinition;
public class TransactionTemplateUtils {
//DefaultTransactionDefinition
//用户描述事务的隔离级别、超时时间、是否为只读是事务和事务传播规则等控制事务具体行为属性
private static DefaultTransactionDefinition def = new DefaultTransactionDefinition();
//Struts2Utils.getApplicationContext()此处
/*
* public static final String[] beanPath = new String[] { "applicationContext-*.xml"};
*
* public static ApplicationContext getApplicationContext(){
* return new ClassPathXmlApplicationContext(beanPath);
* }
*/
private static ApplicationContext ctx = Struts2Utils.getApplicationContext();
/**
* @描述: 获取 事务管理器
* @方法名: getPlatformTransactionManager
* @throws
*/
public static PlatformTransactionManager getPlatformTransactionManager(){
//从Spring容器中请求事务管理器,用PlatformTransactionManager
return ctx.getBean("transactionManager", PlatformTransactionManager.class);
}
/**
* @描述: 获取 控制计量设备事务管理器状态,不需要设置隔离级别 和 传播性
* @方法名: getTransactionStatus
* @param txManager
* @return TransactionStatus
* @throws
*/
public static TransactionStatus getTransactionStatus(
PlatformTransactionManager txManager) {
return txManager.getTransaction(def);
}
/**
* @描述: 获取事务管理器状态,需要设置隔离级别 和 传播性 通过名称 通过常量形式
* @方法名: getTransactionStatus
* @param txManager 事务管理器
* @param isolationLevel 事务的隔离级别
* @param propagationBehavior 事务传播性
* @return TransactionStatus
* @throws
*/
public static TransactionStatus getTransactionStatus(
PlatformTransactionManager txManager, int isolationLevel,
int propagationBehavior) {
//设置隔离级别
def.setIsolationLevel(isolationLevel);
//设置传播性
def.setPropagationBehavior(propagationBehavior);
//TransactionStatus对象代表着事务的状态。以下代码根据传入的事务定义
//对象返回事务并启动事务
return txManager.getTransaction(def);
}
/**
* @描述: 获取事务管理器状态,需要设置隔离级别 和 传播性 通过名称
* @方法名: getTransactionStatus
* @param txManager 事务管理器
* @param isolationLevelName 隔离级别名称
* @param propagationBehaviorName 隔离级别名称
* @return TransactionStatus
* @throws
*/
public static TransactionStatus getTransactionStatus(
PlatformTransactionManager txManager, String isolationLevelName,
String propagationBehaviorName) {
//设置隔离级别名称
def.setIsolationLevelName(isolationLevelName);
//设置传播性名称
def.setPropagationBehaviorName(propagationBehaviorName);
////TransactionStatus对象代表着事务的状态。以下代码根据传入的事务定义
//对象返回事务并启动事务
return txManager.getTransaction(def);
}
public static void main(String[] args) {
PlatformTransactionManager txManager = TransactionTemplateUtils.getPlatformTransactionManager();
TransactionStatus status = TransactionTemplateUtils.getTransactionStatus(txManager, TransactionDefinition.ISOLATION_DEFAULT, TransactionDefinition.PROPAGATION_MANDATORY);
try {
} catch (Exception e) {
//异常 回滚
txManager.rollback(status);
}
//提交
txManager.commit(status);
}
}
|
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);
}
}
}
|
StringUtils |
java |
|
package cn.cd.sg.string.utils;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.Enumeration;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Locale;
import java.util.Properties;
import java.util.Set;
import java.util.StringTokenizer;
import java.util.TreeSet;
import cn.cd.sg.collection.utils.CollectionUtils;
import cn.cd.sg.object.utils.ObjectUtils;
public class StringUtils {
private static final String FOLDER_SEPARATOR = "/";
private static final String WINDOWS_FOLDER_SEPARATOR = "\\";
private static final String TOP_PATH = "..";
private static final String CURRENT_PATH = ".";
private static final char EXTENSION_SEPARATOR = '.';
/**
* @Description: 当一个字段为 null 或者 ""返回 true
* @方法名: isEmpty
* @param : @param str
* @return boolean 返回类型
* @throws
*/
public static boolean isEmpty(String str){
return str == null || str.length() == 0;
}
/**
*
* 描述 : 当一个字符串不为 null 或 ""返回true
* 方法名: isNotEmpty
* 创建人:孙刚
* 创建时间:2014-1-21 下午04:49:50
* @param str
* @throws Exception
* 返回类型@return :boolean
*/
public static boolean isNotEmpty(String str){
return !isEmpty(str);
}
public static boolean isBlank(String str){
int strLen;
if(str == null || (strLen = str.length()) == 0){
return true;
}
for(int i = 0; i < strLen; i++){
if(!Character.isWhitespace(str.charAt(i))){
return false;
}
}
return true;
}
public static boolean isNotBlank(String str){
return !isBlank(str);
}
public static String join(Object array[]){
return join(array, ((String) (null)));
}
public static String join(Object array[], char separator){
if(array == null){
return null;
}else {
return join(array, separator, 0, array.length);
}
}
public static String join(Object array[], char separator, int startIndex, int endIndex){
if(array == null){
return null;
}
int bufSize = endIndex - startIndex;
if(bufSize <= 0){
return "";
}
bufSize *= (array[startIndex] != null ? array[startIndex].toString().length() : 16) + 1;
StringBuffer buf = new StringBuffer(bufSize);
for(int i = startIndex; i < endIndex; i++){
if(i > startIndex){
buf.append(separator);
}
if(array[i] != null){
buf.append(array[i]);
}
}
return buf.toString();
}
public static String join(Object array[], String separator){
if(array == null){
return null;
}else{
return join(array, separator, 0, array.length);
}
}
/**
* 描述 :
* 方法名: join
* 创建人:孙刚
* 创建时间:2014-1-21 下午04:51:57
* @param array
* @param separator
* @param startIndex
* @param endIndex
* 返回类型@return :String
*/
public static String join(Object array[], String separator, int startIndex, int endIndex){
if(array == null){
return null;
}
if(separator == null){
separator = "";
}
int bufSize = endIndex - startIndex;
if(bufSize <= 0){
return "";
}
bufSize *= (array[startIndex] != null ? array[startIndex].toString().length() : 16) + separator.length();
StringBuffer buf = new StringBuffer(bufSize);
for(int i = startIndex; i < endIndex; i++){
if(i > startIndex){
buf.append(separator);
}
if (array[i] != null) {
buf.append(array[i]);
}
}
return buf.toString();
}
@SuppressWarnings("unchecked")
public static String join(Iterator iterator, char separator){
if(iterator == null){
return null;
}
if(!iterator.hasNext()){
return "";
}
Object first = iterator.next();
if(!iterator.hasNext()){
return ObjectUtils.toString(first);
}
StringBuffer buf = new StringBuffer(256);
if(first != null){
buf.append(first);
}
do{
if(!iterator.hasNext()){
break;
}
buf.append(separator);
Object obj = iterator.next();
if(obj != null){
buf.append(obj);
}
}while(true);
return buf.toString();
}
@SuppressWarnings("unchecked")
public static String join(Collection collection, char separator){
if(collection == null){
return null;
}else {
return join(collection.iterator(), separator);
}
}
/**
* 描述 : (判断一个字符串长度是否 大于 0)
* 方法名: hasLength
* 创建人:孙刚
* 创建时间:2014-1-21 下午04:52:23
* @param str
* 返回类型@return :boolean
*/
public static boolean hasLength(CharSequence str) {
return (str != null && str.length() > 0);
}
/**
* 描述 : ()
* 方法名: hasLength
* 创建人:孙刚
* 创建时间:2014-1-21 下午04:53:54
* @param str
* 返回类型@return :boolean
*/
public static boolean hasLength(String str) {
return hasLength((CharSequence) str);
}
/**
* 描述 : ()
* 方法名: hasText
* 创建人:孙刚
* 创建时间:2014-1-21 下午04:54:12
* @param str
* @return
* 返回类型@return :boolean
*/
public static boolean hasText(CharSequence str) {
if (!hasLength(str)) {
return false;
}
int strLen = str.length();
for (int i = 0; i < strLen; i++) {
if (!Character.isWhitespace(str.charAt(i))) {
return true;
}
}
return false;
}
/**
* 描述 : (这里用一句话描述这个方法的作用)
* 方法名: hasText
* 创建人:孙刚
* 创建时间:2014-1-21 下午04:54:42
* @param str
* 返回类型@return :boolean
*/
public static boolean hasText(String str) {
return hasText((CharSequence) str);
}
/**
*
* 描述 : ()
* 方法名: containsWhitespace
* 创建人:孙刚
* 创建时间:2014-1-21 下午04:55:09
* @param str
* @return :boolean
*/
public static boolean containsWhitespace(CharSequence str) {
if (!hasLength(str)) {
return false;
}
int strLen = str.length();
for (int i = 0; i < strLen; i++) {
if (Character.isWhitespace(str.charAt(i))) {
return true;
}
}
return false;
}
/**
* 描述 : (这里用一句话描述这个方法的作用)
* 方法名: containsWhitespace
* 创建人:孙刚
* 创建时间:2014-1-21 下午04:55:40
* @param str
* @return :boolean
*/
public static boolean containsWhitespace(String str) {
return containsWhitespace((CharSequence) str);
}
/**
* 描述 : (这里用一句话描述这个方法的作用)
* 方法名: trimWhitespace
* 创建人:孙刚
* 创建时间:2014-1-21 下午04:56:10
* @param str
* @return :String
*/
public static String trimWhitespace(String str) {
if (!hasLength(str)) {
return str;
}
StringBuilder sb = new StringBuilder(str);
while (sb.length() > 0 && Character.isWhitespace(sb.charAt(0))) {
sb.deleteCharAt(0);
}
while (sb.length() > 0 && Character.isWhitespace(sb.charAt(sb.length() - 1))) {
sb.deleteCharAt(sb.length() - 1);
}
return sb.toString();
}
/**
* 描述 : ()
* 方法名: trimAllWhitespace
* 创建人:孙刚
* 创建时间:2014-1-21 下午04:58:03
* @param str
* @return :String
*/
public static String trimAllWhitespace(String str) {
if (!hasLength(str)) {
return str;
}
StringBuilder sb = new StringBuilder(str);
int index = 0;
while (sb.length() > index) {
if (Character.isWhitespace(sb.charAt(index))) {
sb.deleteCharAt(index);
}
else {
index++;
}
}
return sb.toString();
}
/**
* 描述 : (这里用一句话描述这个方法的作用)
* 方法名: trimLeadingWhitespace
* 创建人:孙刚
* 创建时间:2014-1-21 下午04:58:39
* @param str
* @return
* @return :String
*/
public static String trimLeadingWhitespace(String str) {
if (!hasLength(str)) {
return str;
}
StringBuilder sb = new StringBuilder(str);
while (sb.length() > 0 && Character.isWhitespace(sb.charAt(0))) {
sb.deleteCharAt(0);
}
return sb.toString();
}
/**
* 描述 : (这里用一句话描述这个方法的作用)
* 方法名: trimTrailingWhitespace
* 创建人:孙刚
* 创建时间:2014-1-21 下午04:58:47
* @param str
* @return :String
*/
public static String trimTrailingWhitespace(String str) {
if (!hasLength(str)) {
return str;
}
StringBuilder sb = new StringBuilder(str);
while (sb.length() > 0 && Character.isWhitespace(sb.charAt(sb.length() - 1))) {
sb.deleteCharAt(sb.length() - 1);
}
return sb.toString();
}
/**
* 描述 : (这里用一句话描述这个方法的作用)
* 方法名: trimLeadingCharacter
* 创建人:孙刚
* 创建时间:2014-1-21 下午04:58:58
* @param str
* @param leadingCharacter
* @return :String
*/
public static String trimLeadingCharacter(String str, char leadingCharacter) {
if (!hasLength(str)) {
return str;
}
StringBuilder sb = new StringBuilder(str);
while (sb.length() > 0 && sb.charAt(0) == leadingCharacter) {
sb.deleteCharAt(0);
}
return sb.toString();
}
/**
* 描述 : (这里用一句话描述这个方法的作用)
* 方法名: trimTrailingCharacter
* 创建人:孙刚
* 创建时间:2014-1-21 下午04:59:08
* @param str
* @param trailingCharacter
* @return :String
*/
public static String trimTrailingCharacter(String str, char trailingCharacter) {
if (!hasLength(str)) {
return str;
}
StringBuilder sb = new StringBuilder(str);
while (sb.length() > 0 && sb.charAt(sb.length() - 1) == trailingCharacter) {
sb.deleteCharAt(sb.length() - 1);
}
return sb.toString();
}
/**
* 描述 : (这里用一句话描述这个方法的作用)
* 方法名: startsWithIgnoreCase
* 创建人:孙刚
* 创建时间:2014-1-21 下午04:59:16
* @param str
* @param prefix
* @return :boolean
*/
public static boolean startsWithIgnoreCase(String str, String prefix) {
if (str == null || prefix == null) {
return false;
}
if (str.startsWith(prefix)) {
return true;
}
if (str.length() < prefix.length()) {
return false;
}
String lcStr = str.substring(0, prefix.length()).toLowerCase();
String lcPrefix = prefix.toLowerCase();
return lcStr.equals(lcPrefix);
}
/**
* 描述 : (这里用一句话描述这个方法的作用)
* 方法名: endsWithIgnoreCase
* 创建人:孙刚
* 创建时间:2014-1-21 下午04:59:27
* @param str
* @param suffix
* @return :boolean
*/
public static boolean endsWithIgnoreCase(String str, String suffix) {
if (str == null || suffix == null) {
return false;
}
if (str.endsWith(suffix)) {
return true;
}
if (str.length() < suffix.length()) {
return false;
}
String lcStr = str.substring(str.length() - suffix.length()).toLowerCase();
String lcSuffix = suffix.toLowerCase();
return lcStr.equals(lcSuffix);
}
/**
* 描述 : (这里用一句话描述这个方法的作用)
* 方法名: substringMatch
* 创建人:孙刚
* 创建时间:2014-1-21 下午04:59:34
* @param str
* @param index
* @param substring
* @return :boolean
*/
public static boolean substringMatch(CharSequence str, int index, CharSequence substring) {
for (int j = 0; j < substring.length(); j++) {
int i = index + j;
if (i >= str.length() || str.charAt(i) != substring.charAt(j)) {
return false;
}
}
return true;
}
/**
* 描述 : (这里用一句话描述这个方法的作用)
* 方法名: countOccurrencesOf
* 创建人:孙刚
* 创建时间:2014-1-21 下午04:59:41
* @param str
* @param sub
* @return :int
*/
public static int countOccurrencesOf(String str, String sub) {
if (str == null || sub == null || str.length() == 0 || sub.length() == 0) {
return 0;
}
int count = 0;
int pos = 0;
int idx;
while ((idx = str.indexOf(sub, pos)) != -1) {
++count;
pos = idx + sub.length();
}
return count;
}
/**
* 描述 : (这里用一句话描述这个方法的作用)
* 方法名: replace
* 创建人:孙刚
* 创建时间:2014-1-21 下午04:59:48
* @param inString
* @param oldPattern
* @param newPattern
* @return :String
*/
public static String replace(String inString, String oldPattern, String newPattern) {
if (!hasLength(inString) || !hasLength(oldPattern) || newPattern == null) {
return inString;
}
StringBuilder sb = new StringBuilder();
int pos = 0; // our position in the old string
int index = inString.indexOf(oldPattern);
// the index of an occurrence we've found, or -1
int patLen = oldPattern.length();
while (index >= 0) {
sb.append(inString.substring(pos, index));
sb.append(newPattern);
pos = index + patLen;
index = inString.indexOf(oldPattern, pos);
}
sb.append(inString.substring(pos));
// remember to append any characters to the right of a match
return sb.toString();
}
/**
* 描述 : (这里用一句话描述这个方法的作用)
* 方法名: delete
* 创建人:孙刚
* 创建时间:2014-1-21 下午04:59:56
* @param inString
* @param pattern
* @return :String
*/
public static String delete(String inString, String pattern) {
return replace(inString, pattern, "");
}
/**
* 描述 : (这里用一句话描述这个方法的作用)
* 方法名: deleteAny
* 创建人:孙刚
* 创建时间:2014-1-21 下午05:00:02
* @param inString
* @param charsToDelete
* @return
* @return :String
*/
public static String deleteAny(String inString, String charsToDelete) {
if (!hasLength(inString) || !hasLength(charsToDelete)) {
return inString;
}
StringBuilder sb = new StringBuilder();
for (int i = 0; i < inString.length(); i++) {
char c = inString.charAt(i);
if (charsToDelete.indexOf(c) == -1) {
sb.append(c);
}
}
return sb.toString();
}
/**
* 描述 : (这里用一句话描述这个方法的作用)
* 方法名: quote
* 创建人:孙刚
* 创建时间:2014-1-21 下午05:00:06
* @param str
* @return
* @return :String
*/
public static String quote(String str) {
return (str != null ? "'" + str + "'" : null);
}
/**
* 描述 : (这里用一句话描述这个方法的作用)
* 方法名: quoteIfString
* 创建人:孙刚
* 创建时间:2014-1-21 下午05:00:10
* @param obj
* @return
* @return :Object
*/
public static Object quoteIfString(Object obj) {
return (obj instanceof String ? quote((String) obj) : obj);
}
/**
* 描述 : (这里用一句话描述这个方法的作用)
* 方法名: unqualify
* 创建人:孙刚
* 创建时间:2014-1-21 下午05:00:15
* @param qualifiedName
* @return
* @return :String
*/
public static String unqualify(String qualifiedName) {
return unqualify(qualifiedName, '.');
}
/**
* 描述 : (这里用一句话描述这个方法的作用)
* 方法名: unqualify
* 创建人:孙刚
* 创建时间:2014-1-21 下午05:00:19
* @param qualifiedName
* @param separator
* @return
* @return :String
*/
public static String unqualify(String qualifiedName, char separator) {
return qualifiedName.substring(qualifiedName.lastIndexOf(separator) + 1);
}
/**
* 描述 : (这里用一句话描述这个方法的作用)
* 方法名: capitalize
* 创建人:孙刚
* 创建时间:2014-1-21 下午05:00:22
* @param str
* @return
* @return :String
*/
public static String capitalize(String str) {
return changeFirstCharacterCase(str, true);
}
/**
* 描述 : (这里用一句话描述这个方法的作用)
* 方法名: uncapitalize
* 创建人:孙刚
* 创建时间:2014-1-21 下午05:00:27
* @param str
* @return
* @return :String
*/
public static String uncapitalize(String str) {
return changeFirstCharacterCase(str, false);
}
/**
* 描述 : (这里用一句话描述这个方法的作用)
* 方法名: changeFirstCharacterCase
* 创建人:孙刚
* 创建时间:2014-1-21 下午05:00:31
* @param str
* @param capitalize
* @return
* @return :String
*/
private static String changeFirstCharacterCase(String str, boolean capitalize) {
if (str == null || str.length() == 0) {
return str;
}
StringBuilder sb = new StringBuilder(str.length());
if (capitalize) {
sb.append(Character.toUpperCase(str.charAt(0)));
}
else {
sb.append(Character.toLowerCase(str.charAt(0)));
}
sb.append(str.substring(1));
return sb.toString();
}
/**
* 描述 : (这里用一句话描述这个方法的作用)
* 方法名: getFilename
* 创建人:孙刚
* 创建时间:2014-1-21 下午05:00:36
* @param path
* @return
* @return :String
*/
public static String getFilename(String path) {
if (path == null) {
return null;
}
int separatorIndex = path.lastIndexOf(FOLDER_SEPARATOR);
return (separatorIndex != -1 ? path.substring(separatorIndex + 1) : path);
}
/**
* 描述 : (这里用一句话描述这个方法的作用)
* 方法名: getFilenameExtension
* 创建人:孙刚
* 创建时间:2014-1-21 下午05:00:40
* @param path
* @return
* @return :String
*/
public static String getFilenameExtension(String path) {
if (path == null) {
return null;
}
int sepIndex = path.lastIndexOf(EXTENSION_SEPARATOR);
return (sepIndex != -1 ? path.substring(sepIndex + 1) : null);
}
/**
* 描述 : (这里用一句话描述这个方法的作用)
* 方法名: stripFilenameExtension
* 创建人:孙刚
* 创建时间:2014-1-21 下午05:00:45
* @param path
* @return
* @return :String
*/
public static String stripFilenameExtension(String path) {
if (path == null) {
return null;
}
int sepIndex = path.lastIndexOf(EXTENSION_SEPARATOR);
return (sepIndex != -1 ? path.substring(0, sepIndex) : path);
}
/**
* 描述 : (这里用一句话描述这个方法的作用)
* 方法名: applyRelativePath
* 创建人:孙刚
* 创建时间:2014-1-21 下午05:00:50
* @param path
* @param relativePath
* @return
* @return :String
*/
public static String applyRelativePath(String path, String relativePath) {
int separatorIndex = path.lastIndexOf(FOLDER_SEPARATOR);
if (separatorIndex != -1) {
String newPath = path.substring(0, separatorIndex);
if (!relativePath.startsWith(FOLDER_SEPARATOR)) {
newPath += FOLDER_SEPARATOR;
}
return newPath + relativePath;
}
else {
return relativePath;
}
}
/**
* 描述 : (这里用一句话描述这个方法的作用)
* 方法名: cleanPath
* 创建人:孙刚
* 创建时间:2014-1-21 下午05:00:55
* @param path
* @return
* @return :String
*/
public static String cleanPath(String path) {
if (path == null) {
return null;
}
String pathToUse = replace(path, WINDOWS_FOLDER_SEPARATOR, FOLDER_SEPARATOR);
int prefixIndex = pathToUse.indexOf(":");
String prefix = "";
if (prefixIndex != -1) {
prefix = pathToUse.substring(0, prefixIndex + 1);
pathToUse = pathToUse.substring(prefixIndex + 1);
}
if (pathToUse.startsWith(FOLDER_SEPARATOR)) {
prefix = prefix + FOLDER_SEPARATOR;
pathToUse = pathToUse.substring(1);
}
String[] pathArray = delimitedListToStringArray(pathToUse, FOLDER_SEPARATOR);
List<String> pathElements = new LinkedList<String>();
int tops = 0;
for (int i = pathArray.length - 1; i >= 0; i--) {
String element = pathArray[i];
if (CURRENT_PATH.equals(element)) {
// Points to current directory - drop it.
}
else if (TOP_PATH.equals(element)) {
// Registering top path found.
tops++;
}
else {
if (tops > 0) {
// Merging path element with element corresponding to top path.
tops--;
}
else {
// Normal path element found.
pathElements.add(0, element);
}
}
}
// Remaining top paths need to be retained.
for (int i = 0; i < tops; i++) {
pathElements.add(0, TOP_PATH);
}
return prefix + collectionToDelimitedString(pathElements, FOLDER_SEPARATOR);
}
/**
* 描述 : (这里用一句话描述这个方法的作用)
* 方法名: pathEquals
* 创建人:孙刚
* 创建时间:2014-1-21 下午05:01:05
* @param path1
* @param path2
* @return
* @return :boolean
*/
public static boolean pathEquals(String path1, String path2) {
return cleanPath(path1).equals(cleanPath(path2));
}
/**
* 描述 : (这里用一句话描述这个方法的作用)
* 方法名: parseLocaleString
* 创建人:孙刚
* 创建时间:2014-1-21 下午05:01:09
* @param localeString
* @return
* @return :Locale
*/
public static Locale parseLocaleString(String localeString) {
String[] parts = tokenizeToStringArray(localeString, "_ ", false, false);
String language = (parts.length > 0 ? parts[0] : "");
String country = (parts.length > 1 ? parts[1] : "");
String variant = "";
if (parts.length >= 2) {
// There is definitely a variant, and it is everything after the country
// code sans the separator between the country code and the variant.
int endIndexOfCountryCode = localeString.indexOf(country) + country.length();
// Strip off any leading '_' and whitespace, what's left is the variant.
variant = trimLeadingWhitespace(localeString.substring(endIndexOfCountryCode));
if (variant.startsWith("_")) {
variant = trimLeadingCharacter(variant, '_');
}
}
return (language.length() > 0 ? new Locale(language, country, variant) : null);
}
/**
* 描述 : (这里用一句话描述这个方法的作用)
* 方法名: toLanguageTag
* 创建人:孙刚
* 创建时间:2014-1-21 下午05:01:14
* @param locale
* @return
* @return :String
*/
public static String toLanguageTag(Locale locale) {
return locale.getLanguage() + (hasText(locale.getCountry()) ? "-" + locale.getCountry() : "");
}
/**
* 描述 : (这里用一句话描述这个方法的作用)
* 方法名: addStringToArray
* 创建人:孙刚
* 创建时间:2014-1-21 下午05:01:17
* @param array
* @param str
* @return
* @return :String[]
*/
public static String[] addStringToArray(String[] array, String str) {
if (ObjectUtils.isEmpty(array)) {
return new String[] {str};
}
String[] newArr = new String[array.length + 1];
System.arraycopy(array, 0, newArr, 0, array.length);
newArr[array.length] = str;
return newArr;
}
/**
* 描述 : (这里用一句话描述这个方法的作用)
* 方法名: concatenateStringArrays
* 创建人:孙刚
* 创建时间:2014-1-21 下午05:01:21
* @param array1
* @param array2
* @return
* @return :String[]
*/
public static String[] concatenateStringArrays(String[] array1, String[] array2) {
if (ObjectUtils.isEmpty(array1)) {
return array2;
}
if (ObjectUtils.isEmpty(array2)) {
return array1;
}
String[] newArr = new String[array1.length + array2.length];
System.arraycopy(array1, 0, newArr, 0, array1.length);
System.arraycopy(array2, 0, newArr, array1.length, array2.length);
return newArr;
}
/**
* 描述 : (这里用一句话描述这个方法的作用)
* 方法名: mergeStringArrays
* 创建人:孙刚
* 创建时间:2014-1-21 下午05:01:26
* @param array1
* @param array2
* @return
* @return :String[]
*/
public static String[] mergeStringArrays(String[] array1, String[] array2) {
if (ObjectUtils.isEmpty(array1)) {
return array2;
}
if (ObjectUtils.isEmpty(array2)) {
return array1;
}
List<String> result = new ArrayList<String>();
result.addAll(Arrays.asList(array1));
for (String str : array2) {
if (!result.contains(str)) {
result.add(str);
}
}
return toStringArray(result);
}
/**
* 描述 : (这里用一句话描述这个方法的作用)
* 方法名: sortStringArray
* 创建人:孙刚
* 创建时间:2014-1-21 下午05:01:30
* @param array
* @return
* @return :String[]
*/
public static String[] sortStringArray(String[] array) {
if (ObjectUtils.isEmpty(array)) {
return new String[0];
}
Arrays.sort(array);
return array;
}
/**
* 描述 : (这里用一句话描述这个方法的作用)
* 方法名: toStringArray
* 创建人:孙刚
* 创建时间:2014-1-21 下午05:01:36
* @param collection
* @return
* @return :String[]
*/
public static String[] toStringArray(Collection<String> collection) {
if (collection == null) {
return null;
}
return collection.toArray(new String[collection.size()]);
}
/**
* 描述 : (这里用一句话描述这个方法的作用)
* 方法名: toStringArray
* 创建人:孙刚
* 创建时间:2014-1-21 下午05:01:40
* @param enumeration
* @return
* @return :String[]
*/
public static String[] toStringArray(Enumeration<String> enumeration) {
if (enumeration == null) {
return null;
}
List<String> list = Collections.list(enumeration);
return list.toArray(new String[list.size()]);
}
/**
* 描述 : (这里用一句话描述这个方法的作用)
* 方法名: trimArrayElements
* 创建人:孙刚
* 创建时间:2014-1-21 下午05:01:46
* @param array
* @return
* @return :String[]
*/
public static String[] trimArrayElements(String[] array) {
if (ObjectUtils.isEmpty(array)) {
return new String[0];
}
String[] result = new String[array.length];
for (int i = 0; i < array.length; i++) {
String element = array[i];
result[i] = (element != null ? element.trim() : null);
}
return result;
}
/**
* 描述 : (这里用一句话描述这个方法的作用)
* 方法名: removeDuplicateStrings
* 创建人:孙刚
* 创建时间:2014-1-21 下午05:01:51
* @param array
* @return
* @return :String[]
*/
public static String[] removeDuplicateStrings(String[] array) {
if (ObjectUtils.isEmpty(array)) {
return array;
}
Set<String> set = new TreeSet<String>();
for (String element : array) {
set.add(element);
}
return toStringArray(set);
}
/**
* 描述 : (这里用一句话描述这个方法的作用)
* 方法名: split
* 创建人:孙刚
* 创建时间:2014-1-21 下午05:01:56
* @param toSplit
* @param delimiter
* @return
* @return :String[]
*/
public static String[] split(String toSplit, String delimiter) {
if (!hasLength(toSplit) || !hasLength(delimiter)) {
return null;
}
int offset = toSplit.indexOf(delimiter);
if (offset < 0) {
return null;
}
String beforeDelimiter = toSplit.substring(0, offset);
String afterDelimiter = toSplit.substring(offset + delimiter.length());
return new String[] {beforeDelimiter, afterDelimiter};
}
/**
* 描述 : (这里用一句话描述这个方法的作用)
* 方法名: splitArrayElementsIntoProperties
* 创建人:孙刚
* 创建时间:2014-1-21 下午05:02:01
* @param array
* @param delimiter
* @return
* @return :Properties
*/
public static Properties splitArrayElementsIntoProperties(String[] array, String delimiter) {
return splitArrayElementsIntoProperties(array, delimiter, null);
}
/**
* 描述 : (这里用一句话描述这个方法的作用)
* 方法名: splitArrayElementsIntoProperties
* 创建人:孙刚
* 创建时间:2014-1-21 下午05:02:05
* @param array
* @param delimiter
* @param charsToDelete
* @return
* @return :Properties
*/
public static Properties splitArrayElementsIntoProperties(
String[] array, String delimiter, String charsToDelete) {
if (ObjectUtils.isEmpty(array)) {
return null;
}
Properties result = new Properties();
for (String element : array) {
if (charsToDelete != null) {
element = deleteAny(element, charsToDelete);
}
String[] splittedElement = split(element, delimiter);
if (splittedElement == null) {
continue;
}
result.setProperty(splittedElement[0].trim(), splittedElement[1].trim());
}
return result;
}
/**
* 描述 : (这里用一句话描述这个方法的作用)
* 方法名: tokenizeToStringArray
* 创建人:孙刚
* 创建时间:2014-1-21 下午05:02:09
* @param str
* @param delimiters
* @return
* @return :String[]
*/
public static String[] tokenizeToStringArray(String str, String delimiters) {
return tokenizeToStringArray(str, delimiters, true, true);
}
/**
* 描述 : (这里用一句话描述这个方法的作用)
* 方法名: tokenizeToStringArray
* 创建人:孙刚
* 创建时间:2014-1-21 下午05:02:14
* @param str
* @param delimiters
* @param trimTokens
* @param ignoreEmptyTokens
* @return
* @return :String[]
*/
public static String[] tokenizeToStringArray(
String str, String delimiters, boolean trimTokens, boolean ignoreEmptyTokens) {
if (str == null) {
return null;
}
StringTokenizer st = new StringTokenizer(str, delimiters);
List<String> tokens = new ArrayList<String>();
while (st.hasMoreTokens()) {
String token = st.nextToken();
if (trimTokens) {
token = token.trim();
}
if (!ignoreEmptyTokens || token.length() > 0) {
tokens.add(token);
}
}
return toStringArray(tokens);
}
/**
* 描述 : (这里用一句话描述这个方法的作用)
* 方法名: delimitedListToStringArray
* 创建人:孙刚
* 创建时间:2014-1-21 下午05:02:19
* @param str
* @param delimiter
* @return
* @return :String[]
*/
public static String[] delimitedListToStringArray(String str, String delimiter) {
return delimitedListToStringArray(str, delimiter, null);
}
/**
* 描述 : (这里用一句话描述这个方法的作用)
* 方法名: delimitedListToStringArray
* 创建人:孙刚
* 创建时间:2014-1-21 下午05:02:23
* @param str
* @param delimiter
* @param charsToDelete
* @return
* @return :String[]
*/
public static String[] delimitedListToStringArray(String str, String delimiter, String charsToDelete) {
if (str == null) {
return new String[0];
}
if (delimiter == null) {
return new String[] {str};
}
List<String> result = new ArrayList<String>();
if ("".equals(delimiter)) {
for (int i = 0; i < str.length(); i++) {
result.add(deleteAny(str.substring(i, i + 1), charsToDelete));
}
}
else {
int pos = 0;
int delPos;
while ((delPos = str.indexOf(delimiter, pos)) != -1) {
result.add(deleteAny(str.substring(pos, delPos), charsToDelete));
pos = delPos + delimiter.length();
}
if (str.length() > 0 && pos <= str.length()) {
// Add rest of String, but not in case of empty input.
result.add(deleteAny(str.substring(pos), charsToDelete));
}
}
return toStringArray(result);
}
/**
* 描述 : (这里用一句话描述这个方法的作用)
* 方法名: commaDelimitedListToStringArray
* 创建人:孙刚
* 创建时间:2014-1-21 下午05:02:28
* @param str
* @return
* @return :String[]
*/
public static String[] commaDelimitedListToStringArray(String str) {
return delimitedListToStringArray(str, ",");
}
/**
* 描述 : (这里用一句话描述这个方法的作用)
* 方法名: commaDelimitedListToSet
* 创建人:孙刚
* 创建时间:2014-1-21 下午05:02:32
* @param str
* @return
* @return :Set<String>
*/
public static Set<String> commaDelimitedListToSet(String str) {
Set<String> set = new TreeSet<String>();
String[] tokens = commaDelimitedListToStringArray(str);
for (String token : tokens) {
set.add(token);
}
return set;
}
/**
* 描述 : (这里用一句话描述这个方法的作用)
* 方法名: collectionToDelimitedString
* 创建人:孙刚
* 创建时间:2014-1-21 下午05:02:36
* @param coll
* @param delim
* @param prefix
* @param suffix
* @return
* @return :String
*/
@SuppressWarnings("unchecked")
public static String collectionToDelimitedString(Collection coll, String delim, String prefix, String suffix) {
if (CollectionUtils.isEmpty(coll)) {
return "";
}
StringBuilder sb = new StringBuilder();
Iterator it = coll.iterator();
while (it.hasNext()) {
sb.append(prefix).append(it.next()).append(suffix);
if (it.hasNext()) {
sb.append(delim);
}
}
return sb.toString();
}
/**
* 描述 : (这里用一句话描述这个方法的作用)
* 方法名: collectionToDelimitedString
* 创建人:孙刚
* 创建时间:2014-1-21 下午05:02:42
* @param coll
* @param delim
* @return
* @return :String
*/
@SuppressWarnings("unchecked")
public static String collectionToDelimitedString(Collection coll, String delim) {
return collectionToDelimitedString(coll, delim, "", "");
}
/**
* 描述 : (这里用一句话描述这个方法的作用)
* 方法名: collectionToCommaDelimitedString
* 创建人:孙刚
* 创建时间:2014-1-21 下午05:02:46
* @param coll
* @return
* @return :String
*/
@SuppressWarnings("unchecked")
public static String collectionToCommaDelimitedString(Collection coll) {
return collectionToDelimitedString(coll, ",");
}
/**
* 描述 : (这里用一句话描述这个方法的作用)
* 方法名: arrayToDelimitedString
* 创建人:孙刚
* 创建时间:2014-1-21 下午05:02:49
* @param arr
* @param delim
* @return
* @return :String
*/
public static String arrayToDelimitedString(Object[] arr, String delim) {
if (ObjectUtils.isEmpty(arr)) {
return "";
}
if (arr.length == 1) {
return ObjectUtils.nullSafeToString(arr[0]);
}
StringBuilder sb = new StringBuilder();
for (int i = 0; i < arr.length; i++) {
if (i > 0) {
sb.append(delim);
}
sb.append(arr[i]);
}
return sb.toString();
}
/**
* 描述 : (这里用一句话描述这个方法的作用)
* 方法名: arrayToCommaDelimitedString
* 创建人:孙刚
* 创建时间:2014-1-21 下午05:02:54
* @param arr
* @return
* @return :String
*/
public static String arrayToCommaDelimitedString(Object[] arr) {
return arrayToDelimitedString(arr, ",");
}
public static String capitalise(String str){
return capitalize(str);
}
public static String uncapitalizel(String str)
{
int strLen;
if(str == null || (strLen = str.length()) == 0){
return str;
}else {
return (new StringBuffer(strLen)).append(Character.toLowerCase(str.charAt(0))).append(str.substring(1)).toString();
}
}
}
|