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ć?
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ć?
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
.
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). –