Java API找出一个类文件编译的JDK版本?
是否有任何 Java API 可以找出编译类文件的 JDK 版本?当然,有javap工具可以找出这里提到的主要版本。但是,我想以编程方式执行此操作,以便我可以警告用户为适当的JDK编译它
是否有任何 Java API 可以找出编译类文件的 JDK 版本?当然,有javap工具可以找出这里提到的主要版本。但是,我想以编程方式执行此操作,以便我可以警告用户为适当的JDK编译它
import java.io.*;
public class ClassVersionChecker {
public static void main(String[] args) throws IOException {
for (int i = 0; i < args.length; i++)
checkClassVersion(args[i]);
}
private static void checkClassVersion(String filename)
throws IOException
{
DataInputStream in = new DataInputStream
(new FileInputStream(filename));
int magic = in.readInt();
if(magic != 0xcafebabe) {
System.out.println(filename + " is not a valid class!");;
}
int minor = in.readUnsignedShort();
int major = in.readUnsignedShort();
System.out.println(filename + ": " + major + " . " + minor);
in.close();
}
}
可能的值为:
major minor Java platform version
45 3 1.0
45 3 1.1
46 0 1.2
47 0 1.3
48 0 1.4
49 0 5
50 0 6
51 0 7
52 0 8
53 0 9
54 0 10
55 0 11
56 0 12
57 0 13
58 0 14
basszero的方法可以通过UNIX命令行和“od(1)”命令来完成:
% od -x HelloWorldJava.class |head -2
0000000 feca beba 0000 3100 dc00 0007 0102 2a00
0000020 6f63 2f6d 6e65 6564 6163 642f 6d65 2f6f
“feca beba”是神奇的数字。“0000 3100”0x31,表示 J2SE 5.0。