蟻クラス:クラスのツール

パッケージcom.itmayiedu.utils。

インポートのjava.io.File;
輸入java.io.FileFilter。
インポートにjava.io.IOException;
輸入java.net.JarURLConnectionの。
インポートのjava.net.URL;
輸入java.net.URLDecoder。
輸入はjava.util.ArrayList;
インポートのjava.util.Enumeration;
輸入はjava.util.List;
輸入java.util.jar.JarEntryの。
輸入java.util.jar.JarFile。

パブリッククラスClassUtil {

/ **
*すべてのインターフェイスクラスインターフェイス実装で行わ
* /
パブリック静的リスト<クラス> getAllClassByInterface {(クラスC)
リスト<クラス> returnClassList = NULL;

IF(c.isInterface()){
//取得し、現在のパッケージ名の
文字列のpackageName = c.getPackage()のgetName();.
//下層階級の下で現在のパッケージと子パッケージを取得しますので、
一覧<クラス<>> allClass? getClasses =(のpackageName);
IF(allClass = nullを!){
returnClassList ArrayListの新しい新しい= <クラス>();
(クラスクラス:allClass)のために{
//同じインタフェースかどうかを決定する
場合(c.isAssignableFrom(クラス)){
//自体はに参加しない
IF {(c.equals(クラス)!)
returnClassList.add(クラス);
}
}
}
}
}

returnClassListを返します。
}

/ *
*取得某一类所在包的所有类名不含迭代
* /
パブリック静的文字列[] getPackageAllClassName(文字列classLocation、文字列のpackageName){
//将のpackageName分解
のString [] packagePathSplit = packageName.split( "[。] 「);
文字列realClassLocation = classLocation。
int型packageLength = packagePathSplit.length。
以下のために(INT i = 0; I <packageLength; iは++){
realClassLocation = realClassLocation + File.separator + packagePathSplit [I]。
}
packeageDir =新しいファイル(realClassLocationを)ファイル;
IF(packeageDir.isDirectory()){
文字列[] allClassName = packeageDir.list()。
allClassNameを返します。
}
はnullを返します。
}

/ **
*パッケージからクラスパッケージのすべてを取得する
*
* @paramパック
* @return
* /
パブリック静的リスト<クラス<?>> getClasses(文字列のpackageName){

以下のようなファーストクラスの設定//
リスト<クラス<>>クラス=新しい新しいのArrayList <クラス<>>(); ??
ループの反復が//場合は
、再帰的なブールこれがtrueに=;
//パッケージ名を取得し、置き換える
文字列packageDirNameをpackageName.replace =(、 '/' '');
//このディレクトリを処理するものとループの列挙セットの定義
列挙<URL> dirsに、
試して{
。dirsに=にThread.currentThread()getContextClassLoader( ).getResources(packageDirName);
//ループ反復が継続
しばらく(dirs.hasMoreElementsは()){
//の次の要素を取得
= dirs.nextElement()URLのURL;
//プロトコル名を取得
文字列プロトコル= url.getProtocolを() ;
//もし、サーバーに保存されたファイルの形式の
IF( "ファイル" .equals(プロトコル)){
//物理パスをパッケージ取得
文字列filePathに= URLDecoder.decode(url.getFile() 、 "UTF-8" );
//全体のパッケージ内のファイルなどの文書をスキャンして、コレクションに追加
findAndAddClassesInPackageByFile(のpackageName、filePathに、この再帰的、クラス);
}他のIF( "瓶" .equals(プロトコル)){
//もしjarファイルパッケージファイル
/ /にするJarFileを定義
ジャーにするJarFile、
トライ{
//取得ジャー
ジャー=((はJarURLConnectionに)url.openConnection())getJarFile();.
列挙クラスから得られる//ジャーパッケージ
列挙<たJarEntry>エントリ= jar.entries( );
//反復する同じループ
しながら(entries.hasMoreElementsを()){
//ディレクトリエンティティ内ジャー、及びそのようなバッグジャーMETA-INFおよび他の文書のような他の文書の数であってもよい
たJarEntryエントリ= entries.nextElement( );
文字列名= entry.getName();
// IF /から出発して
IF(name.charAt(0)== '/'){
//の後ろに文字列を取得
名前= name.substring(1)。
}
printStackTrace(); } }




















}
}
}
}キャッチ(IOExceptionを電子){
e.printStackTrace();
}
}
}
}キャッチ(IOExceptionを電子){
e.printStackTrace();
}

クラスを返します。
}

/ **
*パッケージのすべてのクラスを取得するファイルの形式で
*
* @paramのpackageName
* @param PackagePath
* @paramの再帰この
* @paramクラス
* /
パブリック静的な無効findAndAddClassesInPackageByFile(のpackageName文字列、文字列PackagePath、ブール再帰この決勝、
リスト?<クラス<>>クラス){
このパッケージの内容は、ファイルの確立を取得//
ファイルDIR =新しい新しいファイル(PackagePathを);
//ディレクトリが存在しないか、直接のリターンではありませんない場合
であれば(dir.exists(!)|| !dir.isDirectory()){
リターン;
}
//ディレクトリのパケット内のすべてのファイルを取得するために存在する場合に含まれる
ファイル[] = dir.listFilesのdirfiles(FileFilterの新しい新を(){
//カスタムフィルタリングルールを循環させてもよい場合には(サブディレクトリ)、または、それはの.classファイル(コンパイルされたJavaクラスファイル)の終わりである
パブリックブール(受け入れファイルfile){
リターン||(これ&& file.isDirectory()再帰的);(file.getName()endsWith( "クラスを。")。)
}
});
すべてのファイルを通じて//ループ
(ファイルファイル用:dirfiles){
//ディレクトリの場合スキャンし続け
IF(file.isDirectoryを()){
findAndAddClassesInPackageByFile(file.getNameのpackageName + +()、file.getAbsolutePath()、再帰的なこの、 ""
クラス);
}他{
それは、後に削除された場合// Javaクラスファイル.classファイル出るクラス名
文字クラス名= file.getName()サブストリング(0、file.getName()の長さ() - 6);.
試み{
//ためにコレクションに追加
((classes.addにClass.forNameをクラス名+ +のpackageName)) '';
}キャッチ(ClassNotFoundExceptionがE){
e.printStackTrace();
}
}
}
}

//首字母转小写
パブリック静的文字列toLowerCaseFirstOne(文字列S){
IF(Character.isLowerCase(s.charAt(0)))
リターンS。
他に
。。リターン(新しいのStringBuilder())(Character.toLowerCase(s.charAt(0)))((1)s.substring)追加を追加のtoString();
}

对象//初始化
パブリック静的オブジェクトのnewInstance(<?>クラスCLASSINFO)
ClassNotFoundExceptionが、ないInstantiationException、IllegalAccessExceptionがスローを{
(classInfo.newInstanceを返します)。
}
}

おすすめ

転載: www.cnblogs.com/xjatj/p/11220770.html