2009-07-21 18 views
2

Ich muss komplizierte Textdateien aus einer Java-Desktop-Anwendung generieren.Ressourcendatei in Ordner kopieren?

Ich habe entschieden, dass der Code erheblich einfacher zu implementieren wäre, wenn ich eine Vorlagendatei kopieren und an alles anpassen könnte, was erstellt werden muss.

Ich werde nur ein Glas an die Kunden verteilen. Gibt es eine Best-Practice, wie man damit umgeht?

  • Ist es sogar möglich, eine Ressource aus dem Jar zur Laufzeit zu kopieren?
  • Ist es besser, eine Vorlage bei der ersten Ausführung des Jars automatisch zu generieren?
+0

Ich verstehe nicht, wo Sie die Datei kopieren möchten. Kannst du es etwas klarer machen? Wo ist die Vorlagendatei? Ist es in Glas? Möchten Sie, dass Kunden diese Datei nach dem Start der Anwendung auf ihrem Computer haben? – amorfis

+0

mögliches Duplikat von [Wie kopiere ich die Datei innerhalb des Glases nach außerhalb des Glases?] (Http://stackoverflow.com/questions/10308221/how-to-copy-file-inside-jar-to-outside-the-jar) –

Antwort

8

können Sie eine Datei in Ihrem Glas gespeichert gelesen werden:

Class.getResourceAsStream(pathToFile); 

diese question für Details.

5

Ja, Sie können eine Ressource aus Ihrem JAR lesen und in Ihr Dateisystem schreiben. Wie kiannakakis vorschlägt, möchten Sie die Ressource als Stream erhalten.

Allerdings, welcher Klassenlader zu verwenden ist trübe. Ich habe oft gesehen, dass Vorschläge in Web-Anwendungen, die Sie über das Kontextclassloader verwenden sollte: auf eine schnelle Suche

Thread.currentThread().getContextClassLoader().getResourceAsStream() 

Aber dann noch dies zu bestätigen, die richtige Beratung, eine Menge Leute empfehlen die aktuelle Klassenlade statt der Context Class Loader, obwohl die meisten Menschen anerkennen, gibt es keine Antwort, die in jeder Situation perfekt funktioniert. Whee!

An dieser Stelle würde ich sagen, verwenden Sie einfach den aktuellen Klassenlader als @kkiannakakis vorgeschlagen - es ist einfacher, und es ist nicht klar, dass die Verwendung der Kontextklasse Loader wird besser sein. Wenn Sie auf ein Szenario stoßen, in dem das nicht funktioniert, können Sie den Context Class Loader als Alternative ausprobieren.