2010-09-15 17 views
5

Ich schreibe Testfälle, die in OSGI-Umgebung ausgeführt werden müssen, habe ich die Testdaten, die eine Reihe von Dateien im Testpaket ist. Ich kann mit bundle.getResource auf die Testdatendateien zugreifen, die eine URL zurückgibt, von der ich den InputStream für eine bestimmte Datei abrufen kann, aber wie kann ich die Liste der Dateien in einem bestimmten Ordner im Test-Plugin herausfinden. In eclispe könnte ich fileLocator verwenden, um dies zu tun.Suchen von Dateien und Ordnern in einem OSGI-Bundle

/bundle
          Testdaten
                eins.txt
                two.txt
                three.txt
                folder1
                              file1.txt
                              file2.txt

In dem obigen Bündel ich alle Dateien und Ordner zu suchen, die in der Testdaten-Ordner vorhanden sind.


Besten Reards,
Keshav

Antwort

-5

Ressourcen (Klassen, Dateien, Streams usw.) durch den Classloader zugegriffen kann alles zur Verfügung gestellt werden. Normalerweise werden Ressourcen aus einer JAR-Datei geladen. Es könnte aber auch eine Datenbank, ein Dateisystem oder eine HTTP-Ressource sein. Um eine Liste der Ressourcen zu erhalten, sind Sie auf die Quelle des Classloaders angewiesen. Wenn sich die Ressourcen in einer JAR befinden, müssen Sie die JAR selbst abrufen und über z. java.util.zip. Da die ClassLoader-Schnittstelle keine Informationen über die dahinter liegende Quelle bereitstellt, müssen Sie andere Wege gehen (z. B. das Einhaken in das von Ihnen verwendete OSGi-Framework).

+3

Falsch !!! Das Iterieren über Zip-Dateien usw. ist in Java NICHT portierbar, Java hat eine Abstraktion für Ressourcen, die vollständig unterbrochen ist. Es ist eine sehr schlechte Praxis, die leider vorherrscht, da Klassenlader keinen Iterator für ihre Ressourcen haben. Siehe die Antwort von BJ: OSGi verfügt über Bundle.findEntries und Bundle.getEntryPaths, mit denen Sie auf portable Weise über Ressourcen iterieren können. –

12

Wenn Sie wissen, in welchem ​​Paket sich die Informationen befinden, verwenden Sie Bundle.findEntries oder Bundle.getEntryPaths.

Verwandte Themen