Laden einer Datei in den Ressourcen mit FileInputStream
Ich kenne den sicheren Weg, eine Datei zu öffnen, die in den Ressourcen ist:
InputStream is = this.getClass().getResourceAsStream("/path/in/jar/file.name");
nun das problem ist, dass meine Datei ist ein Modell für eine Entscheidung in der Weka-Wrapper-Paket und
die Entscheider Klasse hat nur eine Methode:
public void load(File file) throws Exception
laden führt die Datei und öffnet Sie wie ein FileInputStream. Siehst du einen workaround? Ich würde wirklich
wie-zu-Schiff-Modell setzen Sie in die Ressourcen. Ich dachte, das erstellen einer temporären Datei, schreiben Sie die Inhalte des Modells in der temp-Datei und übergeben dann die temporäre Datei zu Weka, aber es ist so dreckig..
andere Optionen?
InformationsquelleAutor Diegolo | 2013-10-04
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sehe ich 2 Lösungen:
Lösung 1
Lesen Sie die classpath-ressource zu einer temp-Datei und löschen Sie ihn, nachdem Sie aufgerufen
load(File)
Lösung 2
Wenn der ClassLoader das laden der Ressource ist ein URLClassLoader Sie können versuchen, zu finden, die absoluten Datei-Namen. Aber das funktioniert nur, wenn die Ressource, die Sie möchten, existiert als eine Datei auf dem Dateisystem. Es funktioniert nicht, wenn die Datei enthalten ist in einem Glas.
Ich würde vorschlagen, zu schreiben, eine utility-Klasse, die versucht, zu finden die absolute Datei durch den class loader, oder wenn Sie nicht bekommen kann es auf diese Weise verwendet die temp-Datei-Ansatz als fallback.
Oder in einer Objekt-orientierten Art und Weise:
Können Sie auch einen Dritte Partei Bibliothek, wie commons-vfs , können Sie, zum verweisen auf eine Datei in einem jar. E. g.
jar://arch-file-uri[! absolute-path]
. Da commons-vfs gibt eine eigeneFileObject
, dass eine Datei repräsentiert, müssen Sie immer noch kopieren Sie den Inhalt in eine lokalejava.io.File
zur Anpassung an dieDecider.load(File)
API.InformationsquelleAutor René Link