クラスの検索

クラスの検索、前回の投稿、なぜか文字が読みにくいので再投稿

import java.io.File;
import java.net.URL;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.List;
import java.util.jar.JarEntry;
import java.util.jar.JarFile;

public final class ClassUtil{
   private ClassUtil(){}
   /**
    * package名 を指定して、配下のクラス名(インナークラスを除く)を検索する。
    * @param packagename package名
    * @return クラス名配列
    */
   public static String findClass(String packagename){
      List<String> list = new ArrayList<String>();
      if (packagename==null || packagename.length() < 0)
         return list.toArray(new String
{});
      try{
      String target = packagename.replaceAll("\\.","/");
      if (!target.endsWith("/")) target = target + "/";
      URL url = ClassLoader.getSystemClassLoader().getResource(target);
      if (url.getProtocol().equals("jar")){
         String path = url.toString().replaceFirst("jar:file:","");
         path = path.substring(0,path.indexOf("!"));
         JarFile jarfile = new JarFile(new File(path));
         for(Enumeration<JarEntry> en=jarfile.entries();en.hasMoreElements();){
            JarEntry entry = en.nextElement();
            String s = entry.getName();
            if (s.startsWith(target) 
                && s.indexOf("$") < 0 
                && s.endsWith(".class")){
               list.add(entry.getName()
                        .replaceAll("\\.class$","")
                        .replaceAll("/","."));
            }
         }
      }else if(url.getProtocol().equals("file")){
         String pname = target.replaceAll("/",".");
         File f = new File(url.toURI());
         String fary = f.list(new FilenameFilterImpl("^\\w+.class$"));
         for(String fname : fary){
            list.add(pname+fname.replaceAll("\\.class$",""));
         }
      }
      }catch(Exception e){
      }
      return list.toArray(new String
{});
   }
}
===========================================-
import java.io.File;
import java.io.FilenameFilter;
import java.util.regex.Pattern;

/**
 * ファイル名フィルタ.
 * java.io.File#list(FilenameFilter) を実行するための実装クラス
 * (例)
 *      File f = new File("c:/tmp");
 *      // f のディレクトリで CSVファイル名を検索
 *      String[] fnames = f.list(new FilenameFilterImpl("^.*\\.csv$"));
 */
public class FilenameFilterImpl implements FilenameFilter{
   private Pattern pattern;
   /**
    * コンストラクタ.
    * @param pattern java.util.regex.Pattern#compileを生成するための文字列
    */
   public FilenameFilterImpl(String pattern){
      this.pattern = Pattern.compile(pattern);
   }
   /***
    * java.io.FilenameFilter#accept(java.io.File,java.lang.String)の実装
    * @param dir ディレクトリを指すFile
    * @param name ファイル名、java.util.regex.Pattern#matcherを実行するための文字列
    * @return true=ファイルリストに含める
    */
   public boolean accept(File dir,String name){
      File f = new File(dir.getPath()+File.separator+name);
      if (f.isDirectory()) return false;        // ディレクトリは除く
      return this.pattern.matcher(name).matches();
   }
}