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;
}
}
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对毛票票的支持。