java获取版本号及字节码编译版本方法示例
前言
之所以会有这篇文章,是因为公司的开发环境比较老,寻找一些jar包的时候总是会纠结对应的编译版本,感觉很麻烦,所以写了一个工具类用于读取class或jar文件的编译版本,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。
示例代码
packagecom.jinggujin.util; importjava.io.DataInputStream; importjava.io.File; importjava.io.FileInputStream; importjava.io.InputStream; importjava.util.Enumeration; importjava.util.jar.JarEntry; importjava.util.jar.JarFile; /** *Java版本工具 * *@authorjianggujin * */ publicclassJavaVersionUtils { privatestaticfinalintJAVA_CLASS_MAGIC=0xCAFEBABE; publicfinalstaticintJDK_1_2=46; publicfinalstaticintJDK_1_3=47; publicfinalstaticintJDK_1_4=48; publicfinalstaticintJDK_5=49; publicfinalstaticintJDK_6=50; publicfinalstaticintJDK_7=51; publicfinalstaticintJDK_8=52; /** *获得当前环境JDK版本 * *@return */ publicstaticintgetJDKVersion() { Stringversion=System.getProperty("java.version"); if(version!=null&&version.matches("1\\.\\d.*")) { intv=Integer.parseInt(version.charAt(2)+""); if(v>=2) { return44+v; } } return-1; } /** *获得class或jar编译版本 * *@paramfile *@return *@throwsException */ publicstaticintgetCompileVersion(Filefile)throwsException { if(file==null||!file.isFile()||!file.getName().matches(".*\\.((jar)|(class))")) { thrownewIllegalArgumentException("thefilemustbeajarorclass."); } intversion=-1; if(file.getName().endsWith("jar")) { JarFilejarFile=newJarFile(file); Enumerationenumeration=jarFile.entries(); while(enumeration.hasMoreElements()) { JarEntryentry=enumeration.nextElement(); if(entry.getName().endsWith(".class")) { InputStreamin=jarFile.getInputStream(entry); version=getVersion(in); in.close(); break; } } jarFile.close(); } else { InputStreamin=newFileInputStream(file); version=getVersion(in); in.close(); } returnversion; } privatestaticintgetVersion(InputStreamin)throwsException { DataInputStreamdis=newDataInputStream(in); //,前面8个字节CAFEBABE是固定的,之后4个字节是次版本号,次版本号后面的4个字节是jdk的版本号 intmagic=dis.readInt(); if(magic==JAVA_CLASS_MAGIC) { //intminorVersion= dis.readUnsignedShort(); intmajorVersion=dis.readUnsignedShort(); //Java1.2>>46 //Java1.3>>47 //Java1.4>>48 //Java5>>49 //Java6>>50 //Java7>>51 //Java8>>52 returnmajorVersion; } return-1; } }
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对毛票票的支持。