Java 在OSGI捆绑包中查找文件和文件夹

Java 在OSGI捆绑包中查找文件和文件夹,java,file-io,eclipse-plugin,osgi,Java,File Io,Eclipse Plugin,Osgi,我正在编写必须在osgi环境中执行的测试用例,我将测试数据(一组文件)放在测试包中。我可以使用bundle.getResource访问测试数据文件,它返回一个URL,我可以从该URL获取特定文件的InputStream,但是如何在测试插件中找到特定文件夹中的所有文件列表呢。在eclispe中,我可以使用fileLocator来实现这一点 /捆绑 测试数据 一个.txt 两个.txt 三个.txt 文件夹1 file1.txt file2.txt 在上面的包中,我想找到testdata文件夹中存在

我正在编写必须在osgi环境中执行的测试用例,我将测试数据(一组文件)放在测试包中。我可以使用bundle.getResource访问测试数据文件,它返回一个URL,我可以从该URL获取特定文件的InputStream,但是如何在测试插件中找到特定文件夹中的所有文件列表呢。在eclispe中,我可以使用fileLocator来实现这一点

/捆绑
测试数据
一个.txt
两个.txt
三个.txt
文件夹1
file1.txt
file2.txt

在上面的包中,我想找到testdata文件夹中存在的所有文件和文件夹


最佳饲养,

Keshav

任何东西都可以提供类加载器访问的资源(类、文件、流等)。通常,资源是从JAR文件加载的。但它也可以是数据库、文件系统或HTTP资源。因此,为了获得资源列表,您需要依赖类加载器背后的源代码。如果资源位于JAR中,则需要获取JAR本身并通过例如java.util.zip访问它。由于类加载器接口不提供关于背后的源代码的信息,因此您必须采用其他方式(例如挂接到您使用的OSGi框架)。

如果您知道信息所在的捆绑包,请使用bundle.findEntries或bundle.getEntryPath。

错误!!!在Java中,对zip文件等进行迭代是不可移植的,Java对资源的抽象已经完全破坏。不幸的是,这是一种非常糟糕的做法,因为类装入器的资源没有迭代器。参见BJ的答案:OSGi有Bundle.findEntries和Bundle.getEntryPath,允许您以可移植的方式迭代资源。