欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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;
 }
}

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对的支持。