簡體   English   中英

如何實現java.lang.Classloader getResources()?

[英]how to implement java.lang.Classloader getResources()?

我搜索了很多,但沒有找到任何滿意的答案。 如果這對你來說太明顯了,請原諒我。

我編寫了一個類加載器,它正在獲取getResources()的回調,而資源是一個文件夾名稱。 在類加載器中,我有從中獲取資源的根路徑。

現在getResources()要求我返回URL的'Enumeration'

我不知道如何創建Enumeration ,如何在getResources()實現其hasMoreElements()nextElement() getResources() 我無法看到兩者之間的聯系。

我可以從根目錄中簡單地搜索子路徑並將資源的絕對路徑作為URL返回嗎? 為什么需要創建這個復雜的Enumeration

謝謝,VImal

Enumeration是一個非常古老的Java類,已被新的Collections庫取代。 您可以通過創建一個Collection (單個元素)然后在其上調用Collections.enumeration()來獲取一個:

Enumeration<String> enumInstance = Collections.enumeration(Arrays.asList("Bla"));

通常,您必須在自己的類加載器中重寫的兩個最重要的方法是public Class findClass(String name)public InputStream getResourceAsStream(String name) 在大多數情況下,可以將其他人委托給父類加載器。 這意味着你必須有一個非常特殊的目的來覆蓋getResources() 它是什么?

在任何一種情況下,您都可以輕松添加記錄器,將方法委托給父類加載器,並查看父類加載器請求和返回的內容。

UPDATE

根據您的注釋,如果要從運行時生成的路徑加載類/資源 ,則應執行以下操作:當path傳遞給類加載器(例如/home/user1/ )時,它應遞歸列出其內容將文件存儲在兩個不同的集合中 - 類文件和其他文件。 第一個集合將用於類加載,第二個集合將用於資源。

對於資源集合中的每個文件,根據http://docs.oracle.com/javase/6/docs/api/java/lang/ClassLoader.html#getResource%28java.lang.String%29定義它的資源路徑並獲取來自文件的URL: URL url = file.toURI().toURL(); 這些路徑和URL作為key-> value存儲在地圖中的某個位置,並在相關方法中使用它。

至於資源路徑,我認為它應該有點相對於路徑,它被傳遞給你的類加載器: /home/user1/img/logo.gif => /img/logo.gif

暫無
暫無

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

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