五月天青色头像情侣网名,国产亚洲av片在线观看18女人,黑人巨茎大战俄罗斯美女,扒下她的小内裤打屁股

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

關(guān)于獲取路徑下所有class文件

2023-03-10 18:45 作者:蘇亞韓  | 我要投稿

關(guān)于獲取路徑下所有class文件

(最終目的:獲取包下所有的類的全類名)?

分別有四種方法

1、遍歷resources獲取url

通過(guò)類加載器的getResource方法獲取指定目錄下的resource

????????//pathName = "com/xxx/xxx"?

???????? Enumerationresources = classLoader.getResources(pathName);?

???????? while (resources.hasMoreElements())? { ? ??

????????????????URL url = resources.nextElement();

????????????}

2、如果是本地環(huán)境 也就是說(shuō) url.getProtocol() = File??

2.1 通過(guò)當(dāng)前路徑獲取過(guò)濾出 class文件 和 目錄

??

?/**

? ? ?* 獲取路徑下所有的 .class 文件 和? 文件夾

? ? ?* @param filePath? 文件目錄

? ? ?* @param recursive 是否查詢子文件夾

? ? ?* @return 文件

? ? ?*/

? ? public static File[] findFiles(String filePath, boolean recursive) {

? ? ? ? //過(guò)濾出 class文件 和 目錄

? ? ? ? return new File(filePath).listFiles(file ->

? ? ? ? ? ? ? ? (file.isFile() && file.getName().endsWith(POINT + CLASS)) ||

? ? ? ? ? ? ? ? ? ??? ? (file.isDirectory() && recursive));

? ? }

2.2 目錄則進(jìn)行遞歸 ,不是目錄則為class文件直接保存全類名

public static void findFullClassName(String filePath,boolean recursive){

? ? ? ? //遍歷過(guò)濾好的文件

? ? ? ? for (File file : findFiles(filePath,recursive)) {

? ? ? ? ? ? //如果文件是目錄

? ? ? ? ? ? if (file.isDirectory()) {

? ? ? ? ? ? ? ? // ....

? ? ? ? ? ? ? ? //遞歸調(diào)用當(dāng)前方法

? ? ? ? ? ? ? ? findFullClassName(file.getPath(),recursive);

? ? ? ? ? ? }else{

? ? ? ? ? ? ? ? //如果是class文件 則去除 后綴 .class

? ? ? ? ? ? ? ? String className = file.getName().substring(0, file.getName().lastIndexOf("."));

? ? ? ? ? ? ? ? //添加包名到list

? ? ? ? ? ? }

? ? ? ? }

? ? }

3、不是本地環(huán)境,也就是將項(xiàng)目打成jar包后(需要引起注意)

// url = 第二步的url

// 獲取Jar資源

JarURLConnection jarURLConnection = (JarURLConnection) url.openConnection();

JarFile jarFile = jarURLConnection.getJarFile();

Enumeration entries = jarFile.entries();

while (entries.hasMoreElements()) {

? ? JarEntry jarEntry = entries.nextElement();

? ? String jarEntryName = jarEntry.getName();

? ? //包含.class 和 com/xxx/xxx 留下

? ? if (jarEntryName.contains(pathName) && jarEntryName.contains(POINT + CLASS)) {

? ? ? ? //如果是class文件 則去除 后綴 .class

? ? ? ? String className = jarEntryName.substring(0, jarEntryName.lastIndexOf(POINT));

? ? ? ? //添加包名

? ? ? ? fullClassName.add(className.replaceAll(BACKSLASH,POINT));

? ? }

}

4、通過(guò)Spring工具獲取Resource

PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();

MetadataReaderFactory metaReader = new CachingMetadataReaderFactory(resolver.getResourceLoader());

String packagePath =

? ? ResourcePatternResolver.CLASSPATH_ALL_URL_PREFIX + packageName.replace(".", "/") + "/**/*.class";

Resource[] resources = resolver.getResources(packagePath);

for (Resource r : resources) {

? ? MetadataReader reader = metaReader.getMetadataReader(r);

? ? fullClassName.add(reader.getClassMetadata().getClassName());

}

return fullClassName;

總結(jié)

1、Spring如果也是jar包運(yùn)行環(huán)境的話,和步驟三是一致的。

2、Spring如果是本地運(yùn)行環(huán)境的話,是通過(guò)找出每一個(gè)file文件listFiles方法找到目錄及目錄以下的文件。

3、作為學(xué)習(xí),自己寫(xiě)一遍還是不錯(cuò)的。作為使用,推薦使用Spring封裝好的獲取指定路徑資源方法。

關(guān)于獲取路徑下所有class文件的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
宜宾县| 全南县| 巩义市| 内黄县| 三河市| 永德县| 乐清市| 汶川县| 历史| 景德镇市| 昌平区| 宝应县| 凌云县| 万山特区| 永康市| 独山县| 南华县| 诸暨市| 甘泉县| 吉安县| 西峡县| 凯里市| 旺苍县| 上林县| 平武县| 武鸣县| 岳西县| 枣庄市| 湘乡市| 洛隆县| 微博| 明溪县| 岑溪市| 迭部县| 礼泉县| 宁都县| 扶风县| 乌兰察布市| 湖州市| 岑溪市| 扎囊县|