Домой Учебники по Java и J2EE В Java Как найти список всех имен классов из .jar файла? —...

В Java Как найти список всех имен классов из .jar файла? — Jar Class Finder Утилита с отражением Java

701
0

Этот урок будет очень интересным . На прошлой неделе я работал над проектом Java, который требует, чтобы у меня был список классов из файла .jar. С помощью JarEntry а также JarInputStream Утилита я смог извлечь все классы изнутри .jar файл.

JarInputStream создает новый JarInputStream и читает необязательный манифест . Если манифест присутствует, также пытается проверить подписи, если JarInputStream подписан.

Решение ниже также будет работать для вас, если у вас есть какой-либо из следующих запросов:

  • В Java — Как найти класс где-то внутри десятков файлов JAR
  • Как получить имена классов внутри файла JAR ?
  • Ищем класс Java в наборе JAR с помощью find

Учебник по отражению Java: как использовать отражение для вызова метода Java во время выполнения

Давайте начнем. Мы выполним следующие шаги.

  1. Создать класс CrunchifyFindClassesFromJar.java
  2. Создать служебный метод под названием getCrunchifyClassNamesFromJar(String jarFileName)
  3. Перебрать nextJarEntry и если найдены удалить .class от имени добавьте его в JSON список
  4. Распечатать JSONObject, содержащий приведенный выше список классов
CrunchifyFindClassesFromJar.jar

Джава
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
пакет ком . crunchify. учебник ;
Импортировать Java. Ио. FileInputStream ;
Импортировать Java. Util. баночка. JarEntry ;
Импортировать Java. Util. баночка. JarInputStream ;
Импортировать орг. JSON . JSONArray ;
Импортировать орг. JSON . JSONObject ;
/ **
* @author Crunchify.com
*
* /
общественности учебный класс CrunchifyFindClassesFromJar {
@SuppressWarnings ( ресурс )
общественности статический JSONObject getCrunchifyClassNamesFromJar ( String crunchifyJarName ) {
JSONArray listofClasses знак равно новый JSONArray ( ) ;
JSONObject crunchifyObject знак равно новый JSONObject ( ) ;
пытаться {
JarInputStream crunchifyJarFile знак равно новый JarInputStream ( новый FileInputStream ( crunchifyJarName ) ) ;
JarEntry crunchifyJar ;
в то время как ( правда ) {
crunchifyJar знак равно crunchifyJarFile . getNextJarEntry ( ) ;
если ( crunchifyJar == ноль ) {
перерыв ;
}
если ((CrunchifyJar. GetName (). EndsWith ( .class))) {
строка имя класса знак равно crunchifyJar . getName ( ) . replaceAll ( / , // . ) ;
строка мои занятия знак равно имя класса. подстрока ( 0 , имя класса. lastIndexOf ( '.' ) ) ;
listofClasses . положить ( myClass ) ;
}
}
crunchifyObject . положить ( «Имя файла Jar» , crunchifyJarName ) ;
crunchifyObject . положить ( Список класса , listofClasses ) ;
} ловить ( Исключение е ) {
Система. вне. println ( «Упс. Обнаружена проблема при разборе файла» + эл . toString ( ) ) ;
}
вернуть crunchifyObject ;
}
общественности статический недействительным main ( Строка [ ] аргументы ) {
JSONObject myList знак равно getCrunchifyClassNamesFromJar ( /Users//Documents/javax.servlet.jsp.jar ) ;
Система. вне. println ( myList ) ;
}
}

Результат:

Результат — Извлечение классов из .jar в Java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
{
     «Список класса» : [
         javax.el.ArrayELResolver ,
         javax.el.BeanELResolver $ BeanProperties ,
         javax.el.BeanELResolver $ BeanProperty ,
         javax.el.BeanELResolver ,
         javax.el.CompositeELResolver $ CompositeIterator ,
         javax.el.CompositeELResolver ,
         javax.el.ELContext ,
         javax.el.ELContextEvent ,
         , , , , ,
         , , , , , еще много всего . , ,
     ] ,
     «Имя файла Jar» : /Users//Documents/javax.servlet.jsp.jar
}

Бонусный балл:

Проверять, выписываться how to find если конкретная банка содержит конкретный метод.

1
2
3
4
5
6
7
пытаться {
Класс < ? > crunchifyClass знак равно Класс. forName ( className ) ;
Метод основной знак равно crunchifyClass . getDeclaredMethod ( yourMethodName ) ;
главный. invoke ( null ) ;
} ловить ( Исключение е ) {
эл . printStackTrace ( ) ;
}

Надеюсь, эта мини-утилита поможет, если вы хотите быстро достичь той же цели. Не стесняйтесь использовать его в своем производственном проекте .

В Java Как найти список всех имен классов из .jar файла? — Jar Class Finder Утилита с отражением Java

0.00 (0%) 0 votes

ЧИТАТЬ ТАКЖЕ:  Java Timer и TimerTask - пример учебных пособий для напоминаний

ОСТАВЬТЕ ОТВЕТ

Пожалуйста, введите ваш комментарий!
пожалуйста, введите ваше имя здесь