当前位置: 移动技术网 > IT编程>开发语言>Java > java获取版本号及字节码编译版本方法示例

java获取版本号及字节码编译版本方法示例

2019年07月19日  | 移动技术网IT编程  | 我要评论

前言

之所以会有这篇文章,是因为公司的开发环境比较老,寻找一些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;
 }
}

总结

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

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网