2013-06-13 7 views
14

Używam Java NIO skopiować coś:Jak anulować Files.copy() w Javie?

Files.copy(source, target); 

Ale chcę dać użytkownikom możliwość unieważnienia tego (na przykład, jeśli plik jest zbyt duży, a to zajmuje dużo czasu).

Jak powinienem to zrobić?

Odpowiedz

28

Użyj opcji ExtendedCopyOption.INTERRUPTIBLE.

Uwaga: Ta klasa może nie być dostępna publicznie w każdym środowisku.

Zasadniczo, można nazwać Files.copy(...) w nowym wątku, a następnie przerwać tę nić Thread.interrupt():

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

a następnie, aby anulować:

worker.interrupt(); 

Zauważ, że spowoduje to podniesienie FileSystemException.

+0

W języku Java SE 8 ta opcja nie jest obsługiwana w Oracle JDK. Ewentualnie rozważ [używając 'FileChannel'] (http://stackoverflow.com/a/42183069/3453226). –