Анализировать и получать код / ​​строку файла jar - Java

Я хочу проанализировать код (или строки) файла jar (пример: если файл jar содержит "сыр"), я много искал, но не знаю, как это сделать: / Я не хочу использовать JD-GUI, потому что моя программа должна быть автоматической (пользователь нажимает кнопку, а затем он должен знать, содержит ли файл jar определенный метод (например, «public void onEnable ()» или строку (например, «сыр»))

Я искал и нашел:

программно проанализировать файл jar

Извлечь исходный код из файла .jar

https://tomassetti.me/getting-started-with-javaparser-analyzing-java-code-programmatically/

http://docs.oracle.com/javase/7/docs/technotes/tools/windows/javap.html.

Как искать строку в файлах JAR


person D.Dreko    schedule 14.05.2017    source источник
comment
Это может быть дубликат дубликата. См. Здесь stackoverflow. com / questions / 1463192 / и stackoverflow.com/questions/1429172/.   -  person Anton Codes    schedule 14.05.2017
comment
Возможный дубликат Как мне перечислить файлы внутри JAR файл?   -  person Maurice Meyer    schedule 14.05.2017


Ответы (1)


Что-то в этом роде:

  • откройте банку с помощью JarInputStream
  • для каждого JarEntry выполните Class.forName для загрузки класса (правильно составьте пакет)
  • используйте отражение, чтобы получить имена методов (Class.getMethods)
  • добавьте имена и необходимые атрибуты в список для выполнения поиска. Если вы не используете огромные банки или очень старое оборудование, вы можете выполнить простое полное сканирование списка имен с помощью contains () или match (), вероятно, вам не нужны необычные инструменты индексирования (Sphinx, Lucene и т. д.). Если часть RegExp должна работать медленно, создайте регулярное выражение Образец и используйте его повторно.

Быстрая (Linux) альтернатива, только для имен классов:

jar tvf file.jar | grep ClassName

person lorenzo    schedule 14.05.2017
comment
Спасибо ! Прекрасно работает! ‹3 И последний вопрос: как я могу получить все файлы jar в папке (например, C: /Users/User/AppData/Roaming/.minecraft/versions) и проанализировать их? :) - person D.Dreko; 15.05.2017
comment
File.listFiles (...) - это метод, который вы ищете. Если вы хотите также включить подкаталоги, посмотрите Apache commons.io FileUtils.iterateFilesAndDirs - person lorenzo; 15.05.2017