我试图在具有给定前缀的Java应用程序中获取类路径上的所有目录资源,如果资源在文件系统中,则下面的代码可用,但如果它们在JAR文件中则不行。
这是我正在使用的代码:
public class ClasspathHelperTest
{
@Test
public void test() throws Exception
{
ClassLoader effectiveClassLoader = Thread.currentThread().getContextClassLoader();
String pkg = "mydirectory/";
Enumeration<URL> resources = effectiveClassLoader.getResources(pkg);
Assert.assertTrue(resources.hasMoreElements());
while (resources.hasMoreElements())
{
System.out.println(resources.nextElement());
}
}
}
假设我有以下测试数据:
本地文件系统:
/some/directory/path/mydirectory/file.data
然后我像这样运行上面的代码:
java -cp .:/junit.jar:/some/directory/path org.junit.runner.JUnitCore ClasspathHelperTest
正确查找并打印资源:
file:/some/directory/path/mydirectory/
但是如果我创建一个包含mydirectory / file.data的jar文件(/some/directory/path/test.jar),并在类路径上使用Jar文件运行测试,它就找不到资源:
java -cp .:/junit.jar:/some/directory/path/test.jar org.junit.runner.JUnitCore ClasspathHelperTest
收率:
junit.framework.AssertionFailedError: null
at junit.framework.Assert.fail(Assert.java:47)
at junit.framework.Assert.assertTrue(Assert.java:20)
at junit.framework.Assert.assertTrue(Assert.java:27)
at ClasspathHelperTest.test(ClasspathHelperTest.java:20)
在Jar文件中对目录资源进行此操作的正确方法是什么?