Ich habe einen Ressourcenordner / ein Ressourcenpaket im Stammverzeichnis meines Projekts. Ich möchte eine bestimmte Datei "nicht" laden. Wenn ich eine bestimmte Datei laden wollte, würde ich class.getResourceAsStream verwenden und mir würde es gut gehen !! Was ich eigentlich tun möchte, ist, einen "Ordner" in den Ressourcenordner zu laden, die Dateien in diesem Ordner zu durchlaufen und einen Stream zu jeder Datei zu erhalten und den Inhalt einzulesen ... Angenommen, die Dateinamen werden nicht vor der Laufzeit bestimmt ... Was soll ich machen? Gibt es eine Möglichkeit, eine Liste der Dateien in einem Ordner in Ihrer JAR-Datei abzurufen? Beachten Sie, dass die Jar-Datei mit den Ressourcen dieselbe JAR-Datei ist, aus der der Code ausgeführt wird ...
Danke im Voraus...
Antworten:
Schließlich fand ich die Lösung:
Der zweite Block funktioniert nur, wenn Sie die Anwendung auf IDE ausführen (nicht mit JAR-Datei). Sie können ihn entfernen, wenn Ihnen das nicht gefällt.
quelle
Versuche Folgendes. Erstellen
Sie den Ressourcenpfad.
"<PathRelativeToThisClassFile>/<ResourceDirectory>"
Wenn Ihr Klassenpfad beispielsweise com.abc.package.MyClass lautet und sich Ihre Ressourcendateien in src / com / abc / package / resources / befinden:Sie können auch verwenden
quelle
File
Klasse aufgelistet werden . Dieser Code funktioniert nicht mit Ressourcen in einer JAR-Datei. Zeitraum.Ich weiß, das ist viele Jahre her. Aber nur für andere Leute stoßen Sie auf dieses Thema. Sie können eine
getResourceAsStream()
Methode mit dem Verzeichnispfad verwenden, und der Eingabestream enthält alle Dateinamen aus diesem Verzeichnis. Danach können Sie den Verzeichnispfad mit jedem Dateinamen verknüpfen und getResourceAsStream für jede Datei in einer Schleife aufrufen.quelle
Ich hatte das gleiche Problem, als ich versuchte, einige Hadoop-Konfigurationen von Ressourcen zu laden, die in der JAR gepackt waren ... sowohl auf der IDE als auch auf der JAR (Release-Version).
Ich fand
java.nio.file.DirectoryStream
es am besten, Verzeichnisinhalte sowohl über das lokale Dateisystem als auch über das JAR zu durchlaufen.quelle
Der folgende Code gibt den gewünschten "Ordner" als Pfad zurück, unabhängig davon, ob er sich in einem Glas befindet oder nicht.
Benötigt Java 7+.
quelle
folder
) beim Erstellen des Dateisystems ignoriert zu werden scheint. KommtgetPath
also nicht zurückfolder/path/to/...
, sondern nurpath/to/...
.Eine andere Lösung, die Sie folgendermaßen durchführen können
ResourceLoader
:quelle
Einfach ... benutze OSGi. In OSGi können Sie die Einträge Ihres Bundles mit findEntries und findPaths durchlaufen.
quelle
In meiner JAR-Datei befand sich ein Ordner namens "Hochladen". In diesem Ordner befanden sich drei weitere Textdateien. Ich musste genau denselben Ordner und dieselben Dateien außerhalb der JAR-Datei haben. Ich habe den folgenden Code verwendet:
quelle
Wie die anderen Antworten zeigen, werden die Dinge wirklich hässlich, sobald sich die Ressourcen in einer JAR-Datei befinden. In unserem Fall ist diese Lösung:
https://stackoverflow.com/a/13227570/516188
funktioniert sehr gut in den Tests (da der Code beim Ausführen der Tests nicht in eine JAR-Datei gepackt wird), funktioniert aber nicht, wenn die App tatsächlich normal ausgeführt wird. Also habe ich ... die Liste der Dateien in der App fest codiert, aber ich habe einen Test, der die tatsächliche Liste von der Festplatte liest (kann dies tun, da dies in Tests funktioniert) und fehlschlägt, wenn die tatsächliche Liste nicht funktioniert stimmt nicht mit der Liste überein, die die App zurückgibt.
Auf diese Weise habe ich einfachen Code in meiner App (keine Tricks), und ich bin sicher, ich habe dank des Tests nicht vergessen, einen neuen Eintrag in die Liste aufzunehmen.
quelle
Dieser Link zeigt Ihnen, wie.
Die Magie ist die Methode getResourceAsStream ():
quelle