星期一, 五月 23, 2011

window xp发现所有进程及其命令行参数

WMIC /OUTPUT:C:\ProcessList.txt PROCESS get Caption,Commandline,Processid



星期五, 五月 06, 2011

Java WebStart和可执行jar文件如何读取外部jar文件包含的资源。

如何使用classLoad 读取外部jar文件中的资源?

网络运行的Java Webstart的JNLP的写法里和可执行的jar文件里,都包含了对外部jar文件的依赖的语法
比如JNLP 语法:
 <jar href="lib/hsqldb.jar"/>

可执行jar文件MANIFEST.MF里包含的语句:
Class-Path:
lib/appframework-1.0.3.jar
lib/swing-worker-1.1.jar

常见的是把图片等其他非class文件组织打包成一个jar文件,方便程序中使用。

在可执行的jar文件中,只需要一行代码就可以得到这些资源。

比如在lib/appframework-1.0.3.jar包含一个打印格式文件jrxml
都放在report/目录下,一个工作单打印文件WorkOrder.jrxml.

 必须使用Thread.currentThread().getContextClassLoader()定制的ClassLoader来调用
  或this.getClass().getClassLoader()

  注意this的意思必须是个运行时的类实例,而不能是静态类的.class.getClass()的方法。

        InputStream test=null;
        try
        {
        test = Thread.currentThread().
getContextClassLoader().getResourceAsStream("report/WorkOrder.jrxml"); 
或者:
        test =new YouCurrentClassName().getClass().getClassLoader().
getResourceAsStream("report/WorkOrder.jrxml"); 
        if(test!=null)
        {  
        InputStreamReader inr=new InputStreamReader(test,"UTF-8");
        BufferedReader br=new BufferedReader(inr);
        String line="";
        while( (line=br.readLine())!=null)
        {
         System.out.println(line);  
        }


另外不在classpath里的jar包的资源调用。

可以使用java.net.URL("jar:file://d:/temp/test.jar!");的语法来读取。
    public JarFile tJar = null;
    public JarURLConnection uc = null;
   String resourcepath="image/log.jpg";

          URL u = new URL("jar:file:lib/ReportResource_jrxml.jar!/");
            uc = (JarURLConnection)u.openConnection();
            tJar = uc.getJarFile();
//            Enumeration entries = tJar.entries();
//            while (entries.hasMoreElements()) {
//                ZipEntry entry = (ZipEntry) entries.nextElement();
//                System.out.println(entry.getName());
//
//            }
            input = tJar.getInputStream(tJar.getEntry(resourcepath));

星期四, 五月 05, 2011

判断内部IP地址和外部IP地址(private IP address or public IP Address)

/*
* Judge IP Address is private or public address
*/

public static boolean isInnerIP(String ipAddress){    
        boolean isInnerIp = false;    
        long ipNum = getIpNum(ipAddress);    
        /**   
        私有IP:A类  10.0.0.0-10.255.255.255   
               B类  172.16.0.0-172.31.255.255   
               C类  192.168.0.0-192.168.255.255   
        当然,还有127这个网段是环回地址   
        **/
   
        long aBegin = getIpNum("10.0.0.0");    
        long aEnd = getIpNum("10.255.255.255");    
        long bBegin = getIpNum("172.16.0.0");    
        long bEnd = getIpNum("172.31.255.255");    
        long cBegin = getIpNum("192.168.0.0");    
        long cEnd = getIpNum("192.168.255.255");    
        isInnerIp = isInner(ipNum,aBegin,aEnd) || isInner(ipNum,bBegin,bEnd) || isInner(ipNum,cBegin,cEnd) || ipAddress.equals("127.0.0.1");    
        return isInnerIp;               
}   

private static long getIpNum(String ipAddress) {    
    String [] ip = ipAddress.split("\\.");    
    long a = Integer.parseInt(ip[0]);    
    long b = Integer.parseInt(ip[1]);    
    long c = Integer.parseInt(ip[2]);    
    long d = Integer.parseInt(ip[3]);    
   
    long ipNum = a * 256 * 256 * 256 + b * 256 * 256 + c * 256 + d;    
    return ipNum;    
}   


private static boolean isInner(long userIp,long begin,long end){    
     return (userIp>=begin) && (userIp<=end);    
}