我搜索了很多,但没有找到任何满意的答案。如果这对你来说太明显了,请原谅我。
我编写了一个正在获取getResources()回调的类加载器,该资源是一个文件夹名称。在类加载器中,我有从中获取资源的根路径。
现在getResources()
要求我返回'Enumeration'
的网址。
我不知道如何创建Enumeration
,如何在hasMoreElements()
内实现其nextElement()
和getResources()
。我无法看到两者之间的联系。
我可以从根目录中简单地搜索子路径并将资源的绝对路径作为URL返回吗?为什么需要创建这个复杂的Enumeration
?
谢谢, VIMAL
答案 0 :(得分:2)
Enumeration
是一个非常古老的Java类,已被更新的Collections库取代。您可以通过创建Collection
(单个元素)然后在其上调用Collections.enumeration()
来获取一个:
Enumeration<String> enumInstance = Collections.enumeration(Arrays.asList("Bla"));
答案 1 :(得分:2)
通常,您必须在自己的类加载器中覆盖的两个最重要的方法是public Class findClass(String name)
和public InputStream getResourceAsStream(String name)
。在大多数情况下,可以将其他人委托给父类加载器。这意味着您必须有一个非常特殊的目的来覆盖getResources()
。它是什么?
在任何一种情况下,您都可以轻松添加记录器,将方法委托给父类加载器,并查看父类加载器请求和返回的内容。
<强>更新强>
如果根据您的评论,您希望从运行时生成的路径中加载类/资源,则应执行以下操作:
当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();
这些路径和网址在地图中存储为key-&gt;值,并在相关方法中使用。
至于资源路径,我认为它应该与路径有些相关,路径传递给您的类加载器:/home/user1/img/logo.gif
=&gt; /img/logo.gif