2013-06-13 11 views
14

Ich bin mit Java NIO etwas kopieren:Wie Abbrechen von Files.copy() in Java?

Files.copy(source, target); 

Aber ich mag die Möglichkeit geben, die Benutzern diese löschen (zum Beispiel, wenn die Datei zu groß ist und es eine Weile nehmen).

Wie soll ich das tun?

Antwort

28

Verwenden Sie die Option ExtendedCopyOption.INTERRUPTIBLE.

Hinweis: Diese Klasse ist möglicherweise nicht in allen Umgebungen öffentlich verfügbar.

Grundsätzlich Sie Files.copy(...) in einem neuen Thread nennen, und unterbrechen dann das Gewinde mit Thread.interrupt():

Thread worker = new Thread() { 
    @Override 
    public void run() { 
     Files.copy(source, target, ExtendedCopyOption.INTERRUPTIBLE); 
    } 
} 
worker.start(); 

und dann abzubrechen:

worker.interrupt(); 

Beachten Sie, dass dies eine FileSystemException erhöhen wird.

+0

In Java SE 8 wird diese Option im Oracle JDK nicht unterstützt. Alternativ können Sie auch [FileChannel] verwenden (http://stackoverflow.com/a/42183069/3453226). –