2013-06-13 5 views
14

मैं जावा NIO उपयोग कर रहा हूँ कुछ कॉपी करने के लिए:जावा में Files.copy() को कैसे रद्द करें?

Files.copy(source, target); 

लेकिन मैं उपयोगकर्ताओं को इस रद्द करने की क्षमता देने के लिए चाहते हैं (उदाहरण के लिए यदि फ़ाइल बहुत बड़ी है और यह एक समय लग रहा है)।

मुझे यह कैसे करना चाहिए?

उत्तर

28

विकल्प ExtendedCopyOption.INTERRUPTIBLE का उपयोग करें।

नोट: यह कक्षा सभी वातावरण में सार्वजनिक रूप से उपलब्ध नहीं हो सकती है। रद्द करने के लिए

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

और उसके बाद:

मूल रूप से, आप एक नया सूत्र में Files.copy(...) फोन, और फिर Thread.interrupt() साथ कि धागा बीच में

worker.interrupt(); 

सूचना है कि यह एक FileSystemException बढ़ा देंगे।

+0

जावा एसई 8 में, यह विकल्प ओरेकल जेडीके में समर्थित नहीं है। वैकल्पिक रूप से, [फ़ाइलChannel'] का उपयोग करके विचार करें (http://stackoverflow.com/a/42183069/3453226)। –

संबंधित मुद्दे