JAVA获得版本号以及字节码编译版本
来源:互联网 发布:东方财富网龙虎榜数据 编辑:程序博客网 时间:2024/05/01 01:43
公司的开发环境比较老,寻找一些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; }}
阅读全文
1 0
- JAVA获得版本号以及字节码编译版本
- 第四十篇:JAVA获得版本号以及字节码编译版本
- Windows 版本号以及各个版本概述
- 获得版本号
- java 获得系统的名称和版本号
- mvn编译指定JAVA版本号
- android访问网络兼容高版本,获得版本号
- JAVA中 反射加载类 获得类的字节码
- Java获得字节码对象的三种方式
- Java编译、反编译、查看字节码
- Class版本号和Java版本对应关系
- 【JVM笔记】Class版本号对应Java版本
- Class版本号和Java版本对应关系
- Java class文件的JDK编译版本号
- 查看java class文件的编译版本号
- Java class文件的JDK编译版本号
- Android各个版本号,发行时间以及版本代号
- Android版本号以及对应的API Level和版本代号
- “老”程序员的反思 在40岁之际
- Android开发中内存、内部存储、外部存储详解
- 解决安卓与IOS点击效果兼容(去除移动端Ios点击阴影 )
- springMVC集成swagger
- 3D Convolutional Neural Networks for Human Action Recognition
- JAVA获得版本号以及字节码编译版本
- springboot配置
- MapReduce 判断输出路径是否存在问题
- C++ initializer_list(列表初始化)
- 回调函数批本质,求资深专家反驳!!!
- Ubuntu恢复普通用户权限<1000:1000改为0:0>后只能guest身份进入系统(亲测有效)
- Android用CameraApi实现相机开发以及用opengl es实现相机实时滤镜
- 关于hdfs中启动namenode进程
- pandas.DataFrame.describe