Программа просмотра Java-классов (Java Class Viewer) - Обработка файла класса

ОГЛАВЛЕНИЕ

Обработка файла класса используя библиотеку файлов Java-классов

1. Обработка файла класса

Класс org.freeinternals.classfile.core.ClassFile является анализатором файла класса. Он принимает байтовый массив в качестве входного параметра - байтовый массив содержит файл класса. Массив происходит от файла .class, файла .jar, файла .war и т.д. В качестве альтернативы, байтовый массив может быть построен библиотеками как BCEL.

// ArticleCodeDemo.src.zip - org.freeinternals.demo.jCFL_CodeDemo.extractClassFile()
File file = new File("C:/Temp/File.class");
byte[] classByteArray = Tool.readClassFile(file);
ClassFile classfile = new ClassFile(classByteArray);
// ArticleCodeDemo.src.zip - org.freeinternals.demo.jCFL_CodeDemo.extractJarFile()
File file = new File("C:/Temp/tools.jar");
JarFile jarFile = new JarFile(file, false, JarFile.OPEN_READ);
ZipFile zipFile = jarFile;
 final Enumeration zipEntries = zipFile.entries();
while (zipEntries.hasMoreElements()) {
    ZipEntry zipEntry = (ZipEntry) zipEntries.nextElement();
    if (!zipEntry.getName().endsWith(".class")) {
        continue;
    }
     byte[] classByteArray = Tool.readClassFile(zipFile, zipEntry);
    ClassFile classfile = new ClassFile(classByteArray);
     System.out.println();
    System.out.println(zipEntry.getName());
    jCFL_CodeDemo.printClassFile(classfile);
}

Существует класс инструмента org.freeinternals.classfile.ui.Tool который может помочь нам считать данные из файла или zip-архива. Мы знаем, что файлы .jar и .war оба являются zip-форматом файла.

Конструктор ClassFile выбрасывает исключение org.freeinternals.classfile.core.ClassFormatException в случае, если байтовый массив не является верным файлом класса, или java.io.IOException в том случае, если произойдет какая-либо ошибка ввода-вывода (IO-error). Вы можете обрамить выражение блоком try...catch или добавить оператор throws в объявлении метода.