当前位置:编程学习 > JAVA >>

检查java class的版本号

补丁总是会一遍又一遍的打,越打越多

有时候,就担心有人不小心把高版本的class打到低版本jre运行的环境中

简单写了点代码,检查文件夹中class的版本号


[java] 
package org.wee.cv; 
 
import java.io.File; 
import java.io.FileInputStream; 
 
public class ClassVersion { 
     
    /**
     * 检查class文件的版本号
     * @param classFile
     * @return
     * 返回值为:JDK1.4 JDK1.5 ... 或者unknown
     * @throws Exception
     */ 
    public static String checkClassVersion(File classFile) throws Exception{ 
        byte[] data = new byte[8]; 
         
        FileInputStream in = new FileInputStream(classFile); 
        //读取文件前8字节  
        //实际上版本号写在第4-7字节上(从第0字节开始算)  
        in.read(data, 0, 8); 
        in.close(); 
         
        //计算出class文件的主次版本号  
        int minor_version = (((int)data[4])<<8)+data[5]; 
        int major_version = (((int)data[6])<<8)+data[7]; 
        return translateVersionToJDK(major_version); 
    } 
     
    /**
     * 根据主版本号,转换成JDK版本
     * 48是JDK1.4,49是JDK1.5,依次类推
     * @param major_version
     * @return
     */ 
    public static String translateVersionToJDK(final int major_version){ 
        switch(major_version){ 
        case 48: 
            return "JDK1.4"; 
        case 49: 
            return "JDK1.5"; 
        case 50: 
            return "JDK1.6"; 
        case 51: 
            return "JDK1.7"; 
        default: 
            return "unknown"; 
        } 
    } 
 

package org.wee.cv;

import java.io.File;
import java.io.FileInputStream;

public class ClassVersion {
 
 /**
  * 检查class文件的版本号
  * @param classFile
  * @return
  * 返回值为:JDK1.4 JDK1.5 ... 或者unknown
  * @throws Exception
  */
 public static String checkClassVersion(File classFile) throws Exception{
  byte[] data = new byte[8];
  
  FileInputStream in = new FileInputStream(classFile);
  //读取文件前8字节
  //实际上版本号写在第4-7字节上(从第0字节开始算)
  in.read(data, 0, 8);
  in.close();
  
  //计算出class文件的主次版本号
  int minor_version = (((int)data[4])<<8)+data[5];
  int major_version = (((int)data[6])<<8)+data[7];
  return translateVersionToJDK(major_version);
 }
 
 /**
  * 根据主版本号,转换成JDK版本
  * 48是JDK1.4,49是JDK1.5,依次类推
  * @param major_version
  * @return
  */
 public static String translateVersionToJDK(final int major_version){
  switch(major_version){
  case 48:
   return "JDK1.4";
  case 49:
   return "JDK1.5";
  case 50:
   return "JDK1.6";
  case 51:
   return "JDK1.7";
  default:
   return "unknown";
  }
 }

}

[java] 
package org.wee.cv; 
 
import java.io.File; 
import java.util.ArrayList; 
import java.util.HashMap; 
import java.util.List; 
 
public class BatchClassVersionCheck { 
 
    public static void main(String[] args) { 
        try { 
            BatchClassVersionCheck bcvc = new BatchClassVersionCheck(); 
            HashMap<String,List<String>> versionMap = bcvc.getDirectoryClassVersionInfo(new File("D:/test")); 
            for (String version : versionMap.keySet()){ 
                System.out.println("version:" + version); 
                List<String> list = versionMap.get(version); 
                for (String file : list){ 
                    System.out.println(file); 
                } 
            } 
        } catch (Exception e) { 
            e.printStackTrace(); 
        } 
 
    } 
     
    //保存文件夹中的class文件版本信息  
    //key是版本号  
    //value是对应文件的绝对路径  
    private HashMap<String,List<String>> classVersionInfoMap; 
     
    /**
     * 获取文件夹中class类的版本信息
     * @param dir
     * @return
     * @throws Exception
     */ 
    public HashMap<String,List<String>> getDirectoryClassVersionInfo(File dir) throws Exception{ 
        classVersionInfoMap = new HashMap<String,List<S

补充:软件开发 , Java ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,