[英]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.