Java 掃描包下所有類(包括jar包)
package com.MyUtils.file;
import java.io.File; import java.io.FileFilter; import java.io.IOException; import java.net.JarURLConnection; import java.net.URI; import java.net.URISyntaxException; 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; /** * 掃描包下路徑 * 包括本地檔案和jar包檔案 * @author ljb * */ public class ScanningFile { private Class<?> superStrategy = String.class;//介面類class 用於過濾 可以不要 private List<Class<? extends String>> eleStrategyList = new ArrayList<Class<? extends String>>(); private ClassLoader classLoader = ScanningFile.class.getClassLoader();//預設使用的類載入器 private static final String STARATEGY_PATH = "com.MyUtils.file";//需要掃描的策略包名 public static void main(String[] args) { ScanningFile s = new ScanningFile(); s.addClass(); } /** * 獲取包下所有實現了superStrategy的類並加入list */ private void addClass(){ URL url = classLoader.getResource(STARATEGY_PATH.replace(".", "/")); String protocol = url.getProtocol(); if ("file".equals(protocol)) { // 本地自己可見的程式碼 findClassLocal(STARATEGY_PATH); } else if ("jar".equals(protocol)) { // 引用jar包的程式碼 findClassJar(STARATEGY_PATH); } } /** * 本地查詢 * @param packName */ private void findClassLocal(final String packName){ URI url = null ; try { url = classLoader.getResource(packName.replace(".", "/")).toURI(); } catch (URISyntaxException e1) { throw new RuntimeException("未找到策略資源"); } File file = new File(url); file.listFiles(new FileFilter() { public boolean accept(File chiFile) { if(chiFile.isDirectory()){ findClassLocal(packName+"."+chiFile.getName()); } if(chiFile.getName().endsWith(".class")){ Class<?> clazz = null; try { clazz = classLoader.loadClass(packName + "." + chiFile.getName().replace(".class", "")); } catch (ClassNotFoundException e) { e.printStackTrace(); } System.out.println(chiFile); if(superStrategy.isAssignableFrom(clazz)){ eleStrategyList.add((Class<? extends String>) clazz); } return true; } return false; } }); } /** * jar包查詢 * @param packName */ private void findClassJar(final String packName){ String pathName = packName.replace(".", "/"); JarFile jarFile = null; try { URL url = classLoader.getResource(pathName); JarURLConnection jarURLConnection = (JarURLConnection )url.openConnection(); jarFile = jarURLConnection.getJarFile(); } catch (IOException e) { throw new RuntimeException("未找到策略資源"); } Enumeration<JarEntry> jarEntries = jarFile.entries(); while (jarEntries.hasMoreElements()) { JarEntry jarEntry = jarEntries.nextElement(); String jarEntryName = jarEntry.getName(); if(jarEntryName.contains(pathName) && !jarEntryName.equals(pathName+"/")){ //遞迴遍歷子目錄 if(jarEntry.isDirectory()){ String clazzName = jarEntry.getName().replace("/", "."); int endIndex = clazzName.lastIndexOf("."); String prefix = null; if (endIndex > 0) { prefix = clazzName.substring(0, endIndex); } findClassJar(prefix); } if(jarEntry.getName().endsWith(".class")){ Class<?> clazz = null; try { clazz = classLoader.loadClass(jarEntry.getName().replace("/", ".").replace(".class", "")); } catch (ClassNotFoundException e) { e.printStackTrace(); } if(superStrategy.isAssignableFrom(clazz)){ eleStrategyList.add((Class<? extends String>) clazz); } } } } } }
可以去過濾實現了特點介面的類
相關推薦
Java 掃描包下所有類(包括jar包)
package com.MyUtils.file;import java.io.File; import java.io.FileFilter; import java.io.IOException; import java.net.JarURLConnection; i
史上最完整掃描包下所有類(含Jar包掃描,maven子專案掃描)
要掃描包下的所有類,分類路徑下掃描和jar包掃描兩種,其中jar包掃描又分專案中引入的三方jar包,同級maven的多個子專案jar相互引用,還有jdk jar包(這裡不考慮,一般沒哪個專案會掃描jdk jar包裡的類). 我先宣告一個介面,用於應對不同型別的class
獲取包下所有類中的註解的值 (java工具類)
作用:這個工具類主要的作用就是獲取類中的註解的值。 應用場景:做許可權的時候獲取@RequestMapping();的值,自動新增到資料庫中。 /** * getRequestMappingValue方法描述: * 作者:thh
java 遍歷指定包下所有類,返回完整類名。工具類,可以直接拷入使用
1、說明: 此類為本人開發的工具類,具體應用在什麼地方呢。本人在實際專案中,許可權管理這一塊有所應用,應該是許可權這一塊有所需求而開發的。 應用場景說明:許可權資源自動化生產時,使用者點選介面的一鍵生成資源時,介面中就會遍歷指定controller包下所有
java.util.concurrent包下的類 (轉)
文章整理來源:http://www.cnblogs.com/aurawing/articles/1887056.html 一 ,背景: 在JDK1.5之前,Java中要進行業務併發時,通常需要有程式設計師獨立完成程式碼實現,當然也有一些開源的框架提供了這些功能,但是這些依然沒有JDK自帶的功
springboot怎樣掃描與啟動類非同包下也非子包下的類(javaBean)
一般來說springboot只會掃描啟動類當前包和以下的子包中的javabean,但如果非要訪問其他包的話, 也就是如何裝配到IOC容器中,其實也是有辦法的。 第一種: 首先,我們先在外面建立一個Java類,並且在與啟動類同包下建立一個util/PeopleConfiguration.j
複製一個資料夾下所有檔案(包括子資料夾)並修改檔案字尾名 java實現加密文件unlock
import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.i
java 遞迴呼叫自動讀取某資料夾下所有檔案(遞迴呼叫)
import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; import java.util.ArrayList; public cl
Linux C 讀取資料夾下所有檔案(包括子資料夾)的檔名
Linux C 下面讀取資料夾要用到結構體struct dirent,在頭#include <dirent.h>中,如下: #include <dirent.h> struct dirent { long d_ino; /* inode number 索引節點號
Python計算一個目錄下所有檔案(包括子目錄中所有檔案)指定的檔案型別個數
輸入工程名計算一個工程專案中C++,Java,Python,GO語言的檔案個數,並找出Python檔案中最大檔案的檔名 1、先讀取檔案地址,找到該資料夾 import os import os.path path = 'C:/python學習/Python作業/' +
Log4j之設定包下所有類的appender篇
log4j.properties #指定某個包下的所以類呼叫指定的appender log4j.logger.com.coderdream.log4j=debug,appender1 log4j.logger.com.coderdream.log4jDao=info,app
Java之eclipse將工具類打成Jar包、使用jar包、以及刪除jar包
Eclipse如何匯出jar包??? 選中對應的工具類,右鍵==>Export... ==>選中Java目錄下的JAR File==>Next==>選擇匯出路徑==>Fi
java通過http請求工具類(包含檔案傳輸)
package test;import java.io.BufferedReader;import java.io.File;import java.io.IOException;import java.io.InputStreamReader;import java.nio
Java之請求傳送工具類(HttpClientUtils,爬蟲)-yellowcong
Java傳送請求,之前做過一段時間的爬蟲,所以寫了這個請求傳送的工具,這個工具偽裝成百度,然後去爬取推酷的資料,當時是由於推酷有ip訪問限制,你如果是爬蟲,就不讓訪問了,所以我偽裝成了百度,然後就可以隨便爬取推庫的資料了,當時爬了1GB多的文字資料,然後圖
java端使用IText下載PDF.(包含JAR包)
java後臺生成PDF傳給前臺介面,前臺介面生成下載連結IText, 所用的jar包百度雲資源(itextpdf-5.5.8,itext-asian) 不會發生什麼配置檔案丟失的jar包,我也是翻了好久才找到。 連結:https://pan.baidu.c
根據父類獲取同一個包(包括子包)下所有子類
宣告:文章內容全都是自己的學習總結,如有不對的地方請大家幫忙指出。有需要溝通交流的可加我QQ群:425120333 Java語言的三大特性是繼承、封裝、多型。繼承指的是子類通過關鍵字extends繼承父類、或者是implements實現介面。不管
找到父節點下的所有子節點(包括子節點)
新增 not tab clas ren while blog url pkg CREATE TABLE `tab_menu` ( `MU_ID` int(10) NOT NULL AUTO_INCREMENT COMMENT ‘主鍵‘, `MU_NAME`
Java遍歷包中所有類方法註解
|| asm 服務器 ret nec next 代碼 自定義 tco 一.代碼實例 import java.io.File; import java.io.FileFilter; import java.io.IOException; import java.l
java在window下用cmd (javac、jar)命令行模擬Intellij IDEA軟件生成jar包
cmd cti 最重要的 ron 路徑 alloc 不可 alt CP @@首先最重要的cmd命令: javac ,jar :使用如下(註意[.]不要輸錯): 1. javac編譯: D:\MyWorkSet\idea_hadoop>javac -d .\out
Java基礎知識-java.util.concurrent包下常見類的使用
finall iss con value 通信 out 否則 app ted 一,Condition 一個場景,兩個線程數數,同時啟動兩個線程,線程A數1、2、3,然後線程B數4、5、6,最後線程A數7、8、9,程序結束,這涉及到線程之間的通信。 public class