java获取版本号及字节码编译版本方法示例
程序员文章站
2024-02-24 11:58:13
前言
之所以会有这篇文章,是因为公司的开发环境比较老,寻找一些jar包的时候总是会纠结对应的编译版本,感觉很麻烦,所以写了一个工具类用于读取class或jar文件的编译版...
前言
之所以会有这篇文章,是因为公司的开发环境比较老,寻找一些jar包的时候总是会纠结对应的编译版本,感觉很麻烦,所以写了一个工具类用于读取class或jar文件的编译版本,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。
示例代码
package com.jinggujin.util; import java.io.datainputstream; import java.io.file; import java.io.fileinputstream; import java.io.inputstream; import java.util.enumeration; import java.util.jar.jarentry; import java.util.jar.jarfile; /** * java 版本工具 * * @author jianggujin * */ public class javaversionutils { private static final int java_class_magic = 0xcafebabe; public final static int jdk_1_2 = 46; public final static int jdk_1_3 = 47; public final static int jdk_1_4 = 48; public final static int jdk_5 = 49; public final static int jdk_6 = 50; public final static int jdk_7 = 51; public final static int jdk_8 = 52; /** * 获得当前环境jdk版本 * * @return */ public static int getjdkversion() { string version = system.getproperty("java.version"); if (version != null && version.matches("1\\.\\d.*")) { int v = integer.parseint(version.charat(2) + ""); if (v >= 2) { return 44 + v; } } return -1; } /** * 获得class或jar编译版本 * * @param file * @return * @throws exception */ public static int getcompileversion(file file) throws exception { if (file == null || !file.isfile() || !file.getname().matches(".*\\.((jar)|(class))")) { throw new illegalargumentexception("the file must be a jar or class."); } int version = -1; if (file.getname().endswith("jar")) { jarfile jarfile = new jarfile(file); enumeration<jarentry> enumeration = jarfile.entries(); while (enumeration.hasmoreelements()) { jarentry entry = enumeration.nextelement(); if (entry.getname().endswith(".class")) { inputstream in = jarfile.getinputstream(entry); version = getversion(in); in.close(); break; } } jarfile.close(); } else { inputstream in = new fileinputstream(file); version = getversion(in); in.close(); } return version; } private static int getversion(inputstream in) throws exception { datainputstream dis = new datainputstream(in); // ,前面8个字节ca fe ba be 是固定的,之后4个字节是次版本号,次版本号后面的4个字节是jdk的版本号 int magic = dis.readint(); if (magic == java_class_magic) { // int minorversion = dis.readunsignedshort(); int majorversion = dis.readunsignedshort(); // java 1.2 >> 46 // java 1.3 >> 47 // java 1.4 >> 48 // java 5 >> 49 // java 6 >> 50 // java 7 >> 51 // java 8 >> 52 return majorversion; } return -1; } }
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对的支持。
下一篇: Java编程基础测试题分享