code: public synchronized String[] list()
      {
          if(isDirectory() && _list==null)
          {
              ArrayList list = new ArrayList(32);
  
              checkConnection();
              
              JarFile jarFile=_jarFile;
              if(jarFile==null)
              {
                  try
                  {
                      jarFile=((JarURLConnection)
                               ((new URL(_jarUrl)).openConnection())).getJarFile();
                  }
                  catch(Exception e)
                  {
                       LogSupport.ignore(log,e);
                  }
              }
              
              Enumeration e=jarFile.entries();
              String dir=_urlString.substring(_urlString.indexOf("!/")+2);
              while(e.hasMoreElements())
              {
                  JarEntry entry = (JarEntry) e.nextElement();
                  String name=entry.getName().replace('\\','/');
                  if(!name.startsWith(dir) || name.length()==dir.length())
                      continue;
                  String listName=name.substring(dir.length());
                  int dash=listName.indexOf('/');
                  if (dash>=0)
                  {
                      listName=listName.substring(0,dash+1);
                      if (list.contains(listName))
                          continue;
                  }
                  
                  list.add(listName);
              }
              
              _list=new String[list.size()];
              list.toArray(_list);
          }
          return _list;
      }
docs: /* ------------------------------------------------------------