以编程方式列出Java类路径上的所有目录资源

时间:2014-01-14 17:07:30

标签: java jar classpath

我试图在具有给定前缀的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文件中对目录资源进行此操作的正确方法是什么?

0 个答案:

没有答案