Search code examples
versionjava

Java API to find out the JDK version a class file is compiled for?


Are there any Java APIs to find out the JDK version a class file is compiled for? Of course there is the javap tool to find out the major version as mentioned in here. However I want to do it programmatically so that that I could warn the user to compile it for the appropriate JDK


Solution

  • 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();
        }
    }
    

    The possible values are :

    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
    59       0           15
    60       0           16
    61       0           17
    62       0           18
    63       0           19
    

    ref : The Java Virtual Machine Specification, Java SE 19 Edition