Java API找出一个类文件编译的JDK版本?

2022-09-01 04:07:27

是否有任何 Java API 可以找出编译类文件的 JDK 版本?当然,有javap工具可以找出这里提到的主要版本。但是,我想以编程方式执行此操作,以便我可以警告用户为适当的JDK编译它


答案 1
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

答案 2

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。


推荐