2016-05-22 5 views
3

Ich versuche, eine Ressource in meinem Projekt auf einen anderen Speicherort auf der Festplatte zu kopieren. Bisher habe ich diesen Code:So kopieren Sie eine Ressource in eine Datei an einem anderen Speicherort in Java

if (!file.exists()){ 
    try { 
     file.createNewFile(); 
     Files.copy(new InputSupplier<InputStream>() { 
      public InputStream getInput() throws IOException { 
       return Main.class.getResourceAsStream("/" + name); 
      } 
     }, file);     
    } catch (IOException e) { 
     file = null; 
     return null; 
    } 
} 

Und es funktioniert gut, aber die InputSupplier Klasse ist veraltet, so dass ich frage mich, ob es eine bessere Art und Weise zu tun war, was ich zu tun werde versuchen.

Antwort

4

finden Sie in der Dokumentation für die Guava InputSupplier class:

Für InputSupplier<? extends InputStream> statt ByteSource verwenden. Verwenden Sie für InputSupplier<? extends Reader>CharSource. Implementierungen von InputSupplier, die nicht in eine dieser Kategorien fallen, profitieren nicht von einer der Methoden in common.io und sollten eine andere Schnittstelle verwenden. Diese Schnittstelle dient zur Entfernung im Dezember 2015

So in Ihrem Fall geplant ist, die Sie suchen ByteSource:

Resources.asByteSource(url).copyTo(Files.asByteSink(file)); 

this section des Guava Wiki finden Sie weitere Informationen.


Wenn Sie sich für eine reine Java (keine externen Bibliotheken) Version suchen, können Sie wie folgt vorgehen:

try (InputStream is = this.getClass().getClassLoader().getResourceAsStream("/" + name)) { 
    Files.copy(is, Paths.get("C:\\some\\file.txt")); 
} catch (IOException e) { 
    // An error occurred copying the resource 
} 

Beachten Sie, dass dies für Java ist nur gültig 7 und höher.

+0

Ich habe gerade die pure Java-Lösung gefunden und wollte es posten, dann sah ich deine Bearbeitung. Vielen Dank! – NonameSL

+0

Beachten Sie, dass die von Ihnen angezeigte reine Java-Version einen wichtigen Unterschied zur Guava-Version aufweist: Sie versucht nicht einmal, den Stream für die Ressource zu schließen. Die Guava-Version garantiert, dass der Stream nach der Kopie geschlossen wird, unabhängig davon, ob er erfolgreich ist oder nicht. – ColinD

Verwandte Themen