code: public static final HashMap<String,File> findClassByDirAndSub(File dir)
  	{
  		if(dir==null)
  		{
  			throw new NullArgumentException("dir ==null");
  		}
  		if(dir.isFile())
  		{
  			throw new IllegalArgumentException("dir "+dir+" is not a dir");
  		}
  		if(!dir.exists())
  		{
  			throw new IllegalArgumentException("dir "+dir+" not found");
  		}
  		HashMap<String,File> clazzs=new HashMap<String,File>();
  		File clazzPath = dir;
  		String Suffix=".class";
  		if (clazzPath.exists() && clazzPath.isDirectory()) 
  		{
  			// 获取路径长度
  			int clazzPathLen = clazzPath.getAbsolutePath().length() + 1;
  			Stack<File> stack = new Stack<>();
  			stack.push(clazzPath);
  			// 遍历类路径
  			while (stack.isEmpty() == false) 
  			{
  				File path = stack.pop();
  				File[] classFiles = path.listFiles(new FileFilter() {
  					@Override
  					public boolean accept(File pathname) {
  						return pathname.isDirectory() || pathname.getName().endsWith(Suffix);
  					}
  				});
  				for (File subFile : classFiles) 
  				{
  					if (subFile.isDirectory()) 
  					{
  						stack.push(subFile);
  					} else 
  					{
  						String className = subFile.getAbsolutePath();
  						className = className.substring(clazzPathLen, className.length() - Suffix.length());
  						className = className.replace(File.separatorChar, '.');
  						clazzs.put(className, subFile);
  					}
  				}
  			}
  		}
  		return clazzs;
  	}
docs: 以一个class包根目录获取所有的class文件
  如果该目录为c:/bin 且目录结构为c:/bin/net/jueb/util/A.class 则有net.jueb.util.A这个类
  @param classFolder
  @return