java 获取指定的进程id |
|
|
package test;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
public class GetPid {
private static final String PNAME = "QQ";
public static void main(String[] args)
throws IOException {
System.out.println("包含关键字 "+PNAME+" 的进程有:");
System.out.println();
String path = System.getProperty("user.dir");
final File createFileName = new File(path + "\\mytempscript.vbe");
if(createFileName.exists()?createFileName.delete():createFileName.createNewFile()){}
final PrintWriter pw = new PrintWriter(new FileWriter(createFileName,
true), true);
pw.println("for each ps in getobject(\"winmgmts:\\\\.\\root\\cimv2:win32_process\").instances_");
pw.println("wscript.echo ps.handle&vbtab&ps.name");
pw.println("next");
pw.close();
final InputStream ii = Runtime.getRuntime().exec(
"cscript " + path + "\\mytempscript.vbe").getInputStream();
final InputStreamReader ir = new InputStreamReader(ii);
final BufferedReader br = new BufferedReader(ir);
String str = null;
String[] ss = null;
while ((str = br.readLine()) != null) {
if (str.indexOf(PNAME)>0&&str.endsWith(".exe")) {
ss = str.split("\\s");
for(int i=0;i<ss.length;i+=2){
System.out.println("****************************");
System.out.println("进程名:"+ss[i+1]+"\n进程ID:"+ss[i]);
}
}
}
System.out.println("****************************");
ir.close();
ii.close();
br.close();
}
}
运行结果如下
包含关键字 QQ 的进程有:
****************************
进程名:QQ.exe
进程ID:3956
****************************
|
TOMCAT最佳实践 |
|
TOMCAT最佳实践 |
TOMCAT最佳实践
http://wenku.baidu.com/view/3c5e727f5acfa1c7aa00cc15.html
|
SSH 分页思考 |
|
http://tiger-hu.iteye.com/blog/1037035 |
分页程序是自己构造写的,分页的时候只使用了三个变量,一个是totalpages总页码,一个是当前页码currentpages,一个就是数据list集合。
<div class="pageNav">
<!--define the url of the previous page and next page-->
<s:url id="url_index" value="/pageAction.action">
<s:param name="assistDto.currentPages" value="1"></s:param>
</s:url>
<s:url id="url_pre" value="/pageAction.action">
<s:param name="assistDto.currentPages" value="#attr.assistDto.currentPages-1"></s:param>
</s:url>
<s:url id="url_next" value="/pageAction.action">
<s:param name="assistDto.currentPages" value="#attr.assistDto.currentPages+1"></s:param>
</s:url>
<s:url id="url_end" value="/pageAction.action">
<s:param name="assistDto.currentPages" value="#attr.assistDto.totalPages"></s:param>
</s:url>
<table align="center">
<tr>
<td>
<s:if test="#attr.assistDto.currentPages <= 1">首页 </s:if>
<s:else><s:a href="%{url_index}">首页 </s:a></s:else></td>
<td>
<s:if test="#attr.assistDto.currentPages > 1">
<s:a href="%{url_pre}">上一页 </s:a></s:if>
<s:else>上一页 </s:else></td>
<td>第${attr.assistDto.currentPages} 页 </td>
<td><s:if test="#attr.assistDto.currentPages < #attr.assistDto.totalPages">
<s:a href="%{url_next}">下一页 </s:a></s:if>
<s:else>下一页 </s:else></td>
<td><s:if test="#attr.assistDto.currentPages == #attr.assistDto.totalPages || #attr.assistDto.totalPages<=1">尾页 </s:if>
<s:else><s:a href="%{url_end}">尾页 </s:a></s:else></td>
<td>共${attr.assistDto.totalPages}页 </td>
</tr>
</table>
</div>
|
使用s:iterator或c:foreach页面循环输出两个list |
|
http://tiger-hu.iteye.com/blog/1032623 |
有这样的需求,两个list:
1.list包含属性X,值为1、2、3、4、5、6
2.list2包含属性Y,值为a、b、C、D、E、F
3.两个list的size相同
4.输出成(原来的大小),值为合并后的,即:1a、2b、3C、4D、5E、6F
方法是:通过struts的iterator和set、property标签,如下所示:
Java代码
<s:iterator value="list1" status="status" step="1">
/*以下是取得list2的第几个属性对象,并设置到request的范围共享*/
<s:set name="list2" value="#attr.l2[#attr.status.getIndex()]" scope="request"/>
<s:property value="#request.list1.x"/>
<s:property value="#request.list2.y"/>
</s:iterator>
<s:iterator value="list1" status="status" step="1">
/*以下是取得list2的第几个属性对象,并设置到request的范围共享*/
<s:set name="list2" value="#attr.l2[#attr.status.getIndex()]" scope="request"/>
<s:property value="#request.list1.x"/>
<s:property value="#request.list2.y"/>
</s:iterator>
下面是使用foreach实现的两个输出:
Java代码
<c:forEach items="${list1}" var="item" varStatus="status">
<c:out value="${item.X}"></c:out>
<c:out value="${list2[status.index].Y}"></c:out>
</c:forEach>
<c:forEach items="${list1}" var="item" varStatus="status">
<c:out value="${item.X}"></c:out>
<c:out value="${list2[status.index].Y}"></c:out>
</c:forEach>
另附:
jstl中的varStatus
和 var 属性一样, varStatus 用于创建限定了作用域的变量。不过,由 varStatus 属性命名的变量并不存储当前索引值或当前元素,而是赋予 javax.servlet.jsp.jstl.core.LoopTagStatus 类的实例。该类定义了一组特性,它们描述了迭代的当前状态,下面列出了这些特性:
特性 Getter 描述
current getCurrent() 当前这次迭代的(集合中的)项
index getIndex() 当前这次迭代从 0 开始的迭代索引
count getCount() 当前这次迭代从 1 开始的迭代计数
first isFirst() 用来表明当前这轮迭代是否为第一次迭代的标志
last isLast() 用来表明当前这轮迭代是否为最后一次迭代的标志
begin getBegin() begin 属性值
end getEnd() end 属性值
step getStep() step 属性值
<c:foreach var="showBspSubTop" varstatus="i" begin="1" step="1" items="${ showBspSubTops }"></c:foreach>
|
java按行读取文本文件 |
|
http://tiger-hu.iteye.com/blog/994179 |
获得一个文件流Java代码
public static BufferedReader getBufferedReader(String filePath,String charset) {
InputStreamReader isr;
BufferedReader bufferedReader =null;
try {
isr = new InputStreamReader(new FileInputStream(filePath), charset);
bufferedReader= new BufferedReader(isr);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
logger.info(e.getLocalizedMessage());
} catch (FileNotFoundException e) {
e.printStackTrace();
logger.info(e.getLocalizedMessage());
}
return bufferedReader;
}
通过文件流读取文本文件
Java代码
public static StringBuffer getStringBufferWithLineSplitor(BufferedReader bufferReader,String lineSplitor) {
String content;
StringBuffer stringBuffer = new StringBuffer();
try {
while ((content = bufferReader.readLine()) != null) {
stringBuffer.append(content+lineSplitor);
}
} catch (IOException e) {
logger.info(e.getLocalizedMessage());
System.out.println("輸出文件錯誤");
}
return stringBuffer;
}
public static StringBuffer getStringBufferWithLineSplitor(BufferedReader bufferReader,String lineSplitor) {
String content;
StringBuffer stringBuffer = new StringBuffer();
try {
while ((content = bufferReader.readLine()) != null) {
stringBuffer.append(content+lineSplitor);
}
} catch (IOException e) {
logger.info(e.getLocalizedMessage());
System.out.println("輸出文件錯誤");
}
return stringBuffer;
}
使用bufferReader的readLine可以读取到单行的数据,然而我们一般都是统一进行返回数据然后批量处理。那么我们就可以在中间加入一个分隔符,比如这个lineSplitor就可以设置为"\n"啦。
that is all。
|
IP 跟 MAC的校验 |
|
|
JSP 中:IP 跟 MAC的校验
ip 不能以0/127/224-255开头,MAC 第16位不能为1,不得超过3行
/^(((2[0-2]?[0-2]?|1[0-1]?[0-9]?|12[0-6]|12[8-9]|1[3-9]?[0-9]?)\.\b((\d{1,2}|1\d\d|2[0-4]\d|25[0-5])(\b|\.)){3})\/([0-9A-F]{2}-[0-9A-F]{2}-[0-9A-F]{2}-[0-9A-F]{2}-[0-9A-F]{2}-([2-9A-F][0-9A-F]|0[0-9A-F])))$|^((2[0-2]?[0-2]?|1[0-1]?[0-9]?|12[0-6]|12[8-9]|1[3-9]?[0-9]?)\.\b((\d{1,2}|1\d\d|2[0-4]\d|25[0-5])(\b|\.)){3})$|^([0-9A-F]{2}-[0-9A-F]{2}-[0-9A-F]{2}-[0-9A-F]{2}-[0-9A-F]{2}-([2-9A-F][0-9A-F]|0[0-9A-F]))$/
|
本地密码的正则表达式的校验 |
|
|
//本地密码的正则表达式 不支持中文
public static String userPwd_patternStr = "\\w\\?`~!@#%\\^&\\*\\(\\)\\[\\]\\\\\\{\\}\\|\\-=+:;',\\.<>/]*";
|
IP校验 不能以0、127及224-255开头;是正确的IP |
|
|
public class IpReg {
public static void main(String[] args) {
String s = "225.255.255.255";
boolean b = false;
//只要捕获到了异常,说明Ip是非法的,根据需要处理异常
try {
b = validateIP(s);
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("验证结果为 :"+b);
}
public static boolean validateIP(String ip){
boolean b = false;
String[] ips = ip.split("\\.");
if(ips.length!=4){
throw new IllegalArgumentException("Illegal IP ["+ip+"]");
}
//对第一组进行验证
String[] ips1 = ips[0].split("");
if(ips1.length>4){
throw new IllegalArgumentException("Illegal IP ["+ip+"],String ["+ips[0]+"] given that length must less than 4");
}
int fip = 0;
try {
fip = Integer.parseInt(ips[0]);
} catch (NumberFormatException e) {
throw new IllegalArgumentException("Illegal IP ["+ip+"],param ["+ips[0]+"] given must be type of number!");
}
//如果没有抛出异常,则全部是数字,进行判断是否合法
if(fip<0 | fip == 0 | fip == 127){
throw new IllegalArgumentException("Illegal IP ["+ip+"], can not begin with "+fip);
}else{
b = true;
for(int i=224;i<=255;i++){
if(fip==i){
throw new IllegalArgumentException("Illegal IP ["+ip+"], can not begin with "+fip);
}
}
}
//对剩下的三组进行验证
boolean b2 = validate(ips[1]);
boolean b3 = validate(ips[2]);
boolean b4 = validate(ips[3]);
return b&b2&b3&b4;
}
private static boolean validate(String subip){
String[] ips = subip.split("");
if(ips.length>4){
throw new IllegalArgumentException("Illegal IP ["+subip+"],String ["+subip+"] given that length must less than 4");
}
Integer ip = null;
try {
ip = Integer.parseInt(subip);
} catch (NumberFormatException e) {
throw new IllegalArgumentException("Illegal IP ["+subip+"],param ["+ips[0]+"] given must be type of number!");
}
//如果没有抛出异常,则全部是数字,进行判断是否合法
if(ip<=255 && ip>-1){
return true;
}else{
throw new IllegalArgumentException("Illegal IP ["+subip+"],param ["+subip+"] given that must less than 256 and great than -1");
}
}
}
|
正则表达式:IP校验 |
|
|
正则表达式:IP校验
String strPattern =
"^(([0-9]|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.)" + "{3}([0-9]|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])$";
|