Программа просмотра 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 в объявлении метода.