/* ------------------------------------------------------------ */ private List<String> listEntries() { checkConnection(); ArrayList<String> list = new ArrayList<String>(32); JarFile jarFile = _jarFile; if (jarFile == null) { try { JarURLConnection jc = (JarURLConnection) ((new URL(_jarUrl)).openConnection()); jc.setUseCaches(getUseCaches()); jarFile = jc.getJarFile(); } catch (Exception e) { e.printStackTrace(); LOG.ignore(e); } if (jarFile == null) throw new IllegalStateException(); } 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) { // when listing jar:file urls, you get back one // entry for the dir itself, which we ignore if (dash == 0 && listName.length() == 1) continue; // when listing jar:file urls, all files and // subdirs have a leading /, which we remove if (dash == 0) listName = listName.substring(dash + 1, listName.length()); else listName = listName.substring(0, dash + 1); if (list.contains(listName)) continue; } list.add(listName); } return list; }