检查java class的版本号
补丁总是会一遍又一遍的打,越打越多
有时候,就担心有人不小心把高版本的class打到低版本jre运行的环境中
简单写了点代码,检查文件夹中class的版本号
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.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<String>>();
searchClass(dir);
return classVersionInfoMap;
} /**
* 递归方法
* 搜索当前文件夹下的class文件,并计算版本信息,保存在map中
* 当搜索到文件夹时,递归搜索
* @param dir
* @throws Exception
*/
protected void searchClass(File dir) throws Exception{
File[] childFiles = dir.listFiles();
for (File childFile : childFiles){
if (childFile.isDirectory()){
//递归搜索子文件夹
searchClass(childFile);
} else{
if (childFile.getName().toLowerCase().endsWith(".class")){
//搜索出class文件
//将版本信息记录在map中
putVersionInfo(ClassVersion.checkClassVersion(childFile), childFile.getAbsolutePath());
}
}
}
} /**
* 将版本信息记录在map中
* @param version
* @param absolutePath
*/
private void putVersionInfo(String version,String absolutePath){
List<String> list = null;
if (classVersionInfoMap.containsKey(version)){
list = classVersionInfoMap.get(version);
} else{
list = new ArrayList<String>();
}
list.add(absolutePath);
classVersionInfoMap.put(version, list);
} }
检查java class的版本号的更多相关文章
- 微信企业号回调模式配置解说 Java Servlet+Struts2版本号 echostr校验失败解决
微信企业号回调模式配置解说 Java Servlet+Struts2版本号 echostr校验失败解决 echostr校验失败,请您检查是否正确解密并输出明文echostr 异常java.securi ...
- linux 下检查java jar包 程序是否正常 shell
linux 下检查java jar包 程序是否正常 shell http://injavawetrust.iteye.com BATCH_SERVER="batch.jar" NR ...
- 灵魂拷问:如何检查Java数组中是否包含某个值 ?
在逛 programcreek 的时候,我发现了一些专注细节但价值连城的主题.比如说:如何检查Java数组中是否包含某个值 ?像这类灵魂拷问的主题,非常值得深入地研究一下. 另外,我想要告诉大家的是, ...
- JAVA 软件升级版本号比较
简单版本号比较: public class CompareVersion { public static void main(String[] args) { // TODO Auto-gener ...
- 检查java 中有多少个构造函数
检查函数中有多少个构造函数 程序设计思想: 用while来循环,并设置一个布尔类型变量c,当c是true是继续添加构造函数,当c是false是,跳出循环,程序结束.在循环体中,声明一个计数的int型变 ...
- java比较客户端版本号
参考文章:http://www.jb51.net/article/70317.htm 关键点 为什么不能使用String.compareTo方法来比较客户端版本号? 举个例子,之前客户端版本号为:9. ...
- Java实现比较版本号
涉及到客户端的系统中经常需要用到比较版本号的功能,但是比较版本号又不能完全按照字符串比较的方式去用compareTo之类的方法: 这就需要我们总结版本号的通用规则,设计一个比较算法并封装成通用方法来使 ...
- SDK Manager.exe和AVD Manager.exe缺失,Android SDK Tools在检查java环境时卡住了,未响应卡死!
之前安装Android Studio的时候根据提示安装了Android SDK,但是发现目录下没有SDK Manager.exe和AVD Manager.exe,导致SDK的一些操作很不方便! 不知道 ...
- JS检查浏览器类型和版本号
先取得Navigator对象的userAgent属性的小写信息,之后依据正則表達式推断赋值. var Sys = {}; var ua = navigator.userAgent.toLowerCas ...
随机推荐
- Windows8下通过IPv4地址访问Tomcat
最近在做Android开发,手机客户端需要通过IPv4地址访问电脑启动的Web应用服务. 在Windows 7不需要做什么设置,localhost,127.0.0.1或者192.168.0.100都可 ...
- Fedora20安装完Nvidia后启动一直黑屏解决办法。
安装完Fedora20后,把Nvidia驱动装上后重起机器一直黑屏时,切换到命令行下:Alt+F2 登陆上去,然后直接更新: su -c ‘yum update’ ,再重起就OK了.
- 在Myeclipse中安装java Decompiler
由于在myeclipse中的Help选项中没有Install New Software,所以在eclipse中安装插件的方法并不适应于Myeclipse,但是我们可以通过点击Windows->P ...
- Java的位运算符具体解释实例——与(&)、非(~)、或(|)、异或(^)
位运算符主要针对二进制,它包含了:“与”.“非”.“或”.“异或”.从表面上看似乎有点像逻辑运算符,但逻辑运算符是针对两个关系运算符来进行逻辑运算,而位运算符主要针对两个二进制数的位进行逻辑运算.以下 ...
- 平均时间复杂度为O(nlogn)的排序算法
本文包括 1.快速排序 2.归并排序 3.堆排序 1.快速排序 快速排序的基本思想是:采取分而治之的思想,把大的拆分为小的,每一趟排序,把比选定值小的数字放在它的左边,比它大的值放在右边:重复以上步骤 ...
- 基于visual Studio2013解决C语言竞赛题之1023判断排序
题目 解决代码及点评 /* 23. 有10个两位整数,把这些数作以下变化,如果它是素数, 则把它乘以2,若它是偶数则除以2,其余的数减1, 请将变化后的10个数按从小到大 ...
- C++ 需要返回值的函数却没有返回值的情况 单例模式
昨天在看前些天写的代码,发现一个错误. #include <iostream> using namespace std; class singleton { public: static ...
- backbone入门小例子
最近听了个backbone的分享,为了避免听不懂,就先做了个小例子 例子很简单,效果如下 基本视图模板: <script type="tex/template" id=&qu ...
- PHP学习之-Mongodb在Windows下安装及配置
Mongodb在Windows下安装及配置 1.下载 下载地址:http://www.mongodb.org/ 建议下载zip版本. 2.安装 下载windows版本安装就和普通的软件一样,直接下一步 ...
- [置顶] 关于本博客 http://www.imobilebbs.com
由于时间上的关系,本博客不再和引路蜂移动软件博客同步更新, 请直接访问 http://www.imobilebbs.com 谢谢您的支持,再见 引路蜂博客