2727
2828import java .io .File ;
2929import java .io .IOException ;
30- import java .util .Enumeration ;
30+ import java .nio .file .*;
31+ import java .nio .file .attribute .BasicFileAttributes ;
32+ import java .util .*;
3133import java .util .jar .JarEntry ;
3234import java .util .jar .JarFile ;
35+ import java .util .zip .ZipEntry ;
36+ import java .util .zip .ZipFile ;
3337
3438/**
3539 * @author Enaium
@@ -48,23 +52,44 @@ public Jar get() {
4852 Logger .info ("LOAD:{}" , file .getAbsolutePath ());
4953 Jar jar = new Jar ();
5054 try {
51- JarFile jarFile = new JarFile (file );
52- float loaded = 0 ;
53- float files = Util .countFiles (jarFile );
55+ if (file .isFile ()){
56+ ZipFile jarFile = new ZipFile (file );
57+ float loaded = 0 ;
58+ float files = Util .countFiles (jarFile );
5459
5560
56- Enumeration <JarEntry > entries = jarFile .entries ();
57- while (entries .hasMoreElements ()) {
58- JarEntry jarEntry = entries .nextElement ();
59- if (jarEntry .getName ().endsWith (".class" )) {
60- ClassReader classReader = new ClassReader (IOUtil .getBytes (jarFile .getInputStream (new JarEntry (jarEntry .getName ()))));
61- jar .classes .put (jarEntry .getName (), ASMUtil .acceptClassNode (classReader ));
62- } else if (!jarEntry .isDirectory ()) {
63- jar .resources .put (jarEntry .getName (), IOUtil .getBytes (jarFile .getInputStream (new JarEntry (jarEntry .getName ()))));
61+ var entries = jarFile .entries ();
62+ while (entries .hasMoreElements ()) {
63+ ZipEntry jarEntry = entries .nextElement ();
64+ if (jarEntry .getName ().endsWith (".class" )) {
65+ ClassReader classReader = new ClassReader (IOUtil .getBytes (jarFile .getInputStream (new ZipEntry (jarEntry .getName ()))));
66+ jar .classes .put (jarEntry .getName (), ASMUtil .acceptClassNode (classReader ));
67+ } else if (!jarEntry .isDirectory ()) {
68+ jar .resources .put (jarEntry .getName (), IOUtil .getBytes (jarFile .getInputStream (new ZipEntry (jarEntry .getName ()))));
69+ }
70+ setProgress ((int ) ((loaded ++ / files ) * 100f ));
71+ }
72+ jarFile .close ();
73+ } else {
74+ Path root = file .toPath ();
75+ Iterator <Path > itr = Files .walk (root ).filter (Files ::isReadable ).iterator ();
76+ List <Path > paths = new LinkedList <>();
77+ while (itr .hasNext ()){
78+ paths .add (itr .next ());
79+ }
80+ float loaded = 0 ;
81+ float files = paths .size ();
82+ for (Path path : paths ){
83+ String relative = root .relativize (path ).toString ();
84+ if (relative .endsWith (".class" )) {
85+ ClassReader classReader = new ClassReader (IOUtil .getBytes (Files .newInputStream (path )));
86+ jar .classes .put (relative , ASMUtil .acceptClassNode (classReader ));
87+ } else if (!Files .isDirectory (path )) {
88+ jar .resources .put (relative , IOUtil .getBytes (Files .newInputStream (path ));
89+ }
90+ setProgress ((int ) ((loaded ++ / files ) * 100f ));
6491 }
65- setProgress ((int ) ((loaded ++ / files ) * 100f ));
6692 }
67- jarFile .close ();
6893 } catch (IOException e ) {
6994 throw new RuntimeException (e );
7095 }
0 commit comments