2013-06-13 12 views
14

che sto utilizzando Java NIO per copiare qualcosa:Come cancellare Files.copy() in Java?

Files.copy(source, target); 

Ma io voglio dare agli utenti la possibilità di cancellare questa (ad esempio, se il file è troppo grande e sta prendendo un po ').

Come devo fare?

risposta

28

Utilizzare l'opzione ExtendedCopyOption.INTERRUPTIBLE.

Nota: Questa classe potrebbe non essere disponibile al pubblico in tutti gli ambienti.

In sostanza, si chiama Files.copy(...) in un nuovo thread, e quindi interrompere quel filo con Thread.interrupt():

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

e quindi di annullare:

worker.interrupt(); 

Si noti che questo genererà un FileSystemException.

+0

In Java SE 8, questa opzione non è supportata in Oracle JDK. In alternativa, considera [utilizzando un 'FileChannel'] (http://stackoverflow.com/a/42183069/3453226). –