パッケージに存在するクラスを一覧する

・BeanShellを利用してパッケージに存在するクラスを一覧する。

(1) http://www.beanshell.org/ から bsh-core-2.0b4.jar と bsh-classpath-2.0b4.jar を
  ダウンロードして、CLASSPATHに含める

(2) クラス検索用のJAVAクラスを下記のように作成する

import bsh.classpath.BshClassPath;

import java.util.Set;
import java.util.Iterator;
import java.util.List;
import java.util.ArrayList;

public class TestSearchClass {

	public static void main( String [] arg ) {

		// exampleパッケージ内のクラスを一覧する
		String packageName = "example";

		List packageList = searchPackage(packageName);
		for (int i = 0; i < packageList.size(); i++){
			String fullClassName = (String)packageList.get(i);
			int lastIdx = fullClassName.lastIndexOf(".");
			String className = fullClassName.substring(lastIdx+1);
			System.out.println(className + ":" + fullClassName);
		}
		
	}

	/**
	 * パッケージ一覧を取得する
	 * @param name
	 * @return
	 */
	public static List<String> searchPackage( String name ) {

		List<String> ret = new ArrayList<String>();

		BshClassPath bcp = null;
		try {
			System.err.close()
			bcp = BshClassPath.getUserClassPath();
		} catch( bsh.ClassPathException e ) {}

		// パッケージ名一覧を取得する
		Set set = bcp.getPackagesSet();
		Iterator i = set.iterator();
		while( i.hasNext() ) {
			searchClass( bcp, ret, name, (String)i.next() );
		}
		return ret;
	}

	/**
	 * パッケージ内のクラス名を取得する
	 */
	public static void searchClass(BshClassPath bcp, List<String> ret, String name, String packageName ) {
		Set set = bcp.getClassesForPackage( packageName );
		Iterator i = set.iterator();
		while( i.hasNext() ) {
			String className = (String)i.next();
			if( className.indexOf( "$" ) >= 0 ) {
				continue;
			}
			if( className.indexOf( name ) != -1 ) {
				ret.add( className );
			}
		}
	}
}

・展開デプロイの場合はファイルPathからの検索が可能

public getClassInfo {

	/**
	 * クラス一覧を取得する
	 */
	public static void main(String[] args){
		searchPackage = "example";
		m_htInfoList = getClassInfo(searchPackage, null);
	}

	/**
	 * 指定されたパッケージ以下のクラス情報を取得する<BR>
	 * 
	 * @param resourcePath
	 * @param bootstrap
	 * @return
	 */
	private Hashtable getClassInfo(String resourcePath, ClassLoader bootstrap){

		Hashtable map = new Hashtable();

		try {

			if (bootstrap == null){
				bootstrap = Thread.currentThread().getContextClassLoader();
			}

			URL url = bootstrap.getResource(resourcePath);
			String path = url.getPath();

			try {
				URL url2 = this.getClass().getResource(resourcePath);
				if (url2 != null){
					String path2 = url2.getPath();
				}
			} catch (Exception e){}

			File dir = new File(path);
			File[] files = dir.listFiles();
			if (files != null){
				for (int i = 0; i < files.length; i++) {
					File file = files[i];
					if (file.isFile()){
						String strPathClass = file.getPath().replaceAll("\\\\", "/");
						String strClass = strPathClass.substring( strPathClass.lastIndexOf( "/" ) + 1 ).replaceAll( ".class" , "" );
						map.put(strClass.toUpperCase() , strPathClass.substring(strPathClass.lastIndexOf(resourcePath)).replaceAll( ".class" , "" ).replaceAll("/", "."));
					} else if (file.isDirectory()) {
						Hashtable subMap = getClassInfo(resourcePath + "/" + file.getName(), bootstrap);
						map.putAll(subMap);
					}
				}
			}

		} catch (Exception e){
			e.printStackTrace();
		}

		return map;
	}

}

トップ   差分 バックアップ リロード   一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2009-06-11 (木) 00:48:53 (5605d)