簡體   English   中英

無法使用 ClassLoader#getResources() 枚舉 `class` 文件

[英]Can't enumerate `class` files with ClassLoader#getResources()

我正在嘗試枚舉 package 中的類

Enumeration<URL> resourceUrls = myObject.getClassLoader().getResources("path/to/my/package/");
while (resourceUrls.hasMoreElements()) {
   ...

不幸的是,它什么也沒返回。 為什么?

假設路徑是正確的。 路徑不以斜線開頭,以斜線結尾。 path.to.my.package package 下有幾個public classes


我從 Spring 獲取此代碼。

您不能像走文件路徑那樣走 class 路徑。 遍歷文件路徑是在文件系統上完成的,這不適用於 class 路徑。

雖然 java class 路徑條目的形成類似於文件路徑,並且通常是文件夾和文件(在文件系統上或在 JAR 存檔中),但不一定非要如此。 事實上,一個單一的 package 的類可能來自不同性質的不同位置:一個可能從本地 JAR 文件加載,而另一個可能從遠程 ZE6B391A8D2C4D4557035A23A8B6 加載。

如果資源在不同的 JAR 文件(或其他位置)中具有相同的名稱,則存在方法ClassLoader.getResources()以提供對資源的所有“出現”的訪問。 例如,您可以使用

ClassLoader.getSystemClassLoader().getResources("META-INF/MANIFEST.MF");

訪問 class 路徑中每個 JAR 文件的清單文件。

嘗試

Enumeration<URL> urls = ClassLoader.getSystemClassLoader().getResources("path/to/my/package");

while (urls.hasMoreElements()) {
    System.out.println(urls.nextElement());
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM