前言
之所以会有这篇文章,是因为公司的开发环境比较老,寻找一些jar包的时候总是会纠结对应的编译版本,感觉很麻烦,所以写了一个工具类用于读取class或jar文件的编译版本,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。
示例代码
java" id="highlighter_320723">
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
|
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 ;
}
}
|
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对服务器之家的支持。
原文链接:http://blog.csdn.net/jianggujin/article/details/72899368