2012-08-27 24 views
12

मैं विंडोज 7 का उपयोग कर रहा जावा 7 अद्यतन 6 और उसके पाया इस अजीब (कम से कम मेरे लिए) व्यवहार -
मैं दो फ़ाइलों E:\delete1.txt और E:\delete2.txt है दोनों पढ़ रहे हैं केवल फ़ाइलें, जब मैं निम्नलिखित यह बिना किसी समस्या के नष्ट कर दिया जाता है की तरह फ़ाइल को नष्ट करने का प्रयास करें -अंतर हटाना (पथ) और फ़ाइल # हटाना()

File file = new File("E:\\delete1.txt"); 
assertTrue(file.delete()); 

लेकिन जब मैं की तरह NIO एपीआई का उपयोग कर फ़ाइल को नष्ट निम्नलिखित -

Path path = Paths.get("E:\\delete2.txt"); 
Files.delete(path); 

यह java.nio.file.AccessDeniedException फेंकता है।

पुराने और नए एनओओ एपीआई के साथ एक ही ऑपरेशन के लिए अलग व्यवहार क्यों?

+0

और यदि आप उन फ़ाइलों को स्वैप करते हैं जिन्हें आप चारों ओर हटा रहे हैं I'e 'एनआईओ 'एपीआई हटाएं' delete1.txt' और पुरानी एपीआई 'फाइल' हटाएं' delete2.txt' क्या होता है? –

+0

किसी भी मामले में nio कॉल विफल रहता है। – Premraj

+2

@MichaelBorgwardt क्यों अजीब? वह बस एक फ़ाइल को हटाने की कोशिश कर रहा है (जो केवल पढ़ने के लिए होता है) – assylias

उत्तर

10

जैसा कि चर्चा की गई here - मुद्दा यह है कि java.io.File में विशेष रूप से विंडोज़ पर कई विषमताएं हैं। इस मामले में यह फ़ाइल को हटाए जाने से पहले फ़ाइल विशेषताओं को रीसेट करता है, इसलिए यही उम्मीद नहीं की जा सकती है। यह व्यवहार है जो वापस आता है> 10 साल और इसलिए अब बदलना जोखिम भरा होगा। इसमें इस तरह की कई अन्य विषमताएं हैं, इस कारण से केवल को नए एपीआई का उपयोग करने के लिए फिर से लागू नहीं किया गया था।

अगर हम कमांड विंडो से फ़ाइल को हटाने का प्रयास करते हैं तो विंडोज़ एक ही (एक्सेस अस्वीकृत) त्रुटि फेंकता है लेकिन फ़ाइल एक्सप्लोरर विंडो से हटा दी जाती है। ऐसा लगता है कि File#delete() में गलत कार्यान्वयन है और इसके बजाय Files#delete(Path) को प्राथमिकता दी जानी चाहिए।

+0

क्या यह विस्तार से विस्तारित करने के लिए विस्तारित किया जा सकता है कि 'फ़ाइल # हटाएं()' क्या गलत है? – ZX9

0

पुराने और नए एनओओ एपीआई के साथ एक ही ऑपरेशन के लिए अलग व्यवहार क्यों?

क्योंकि इसी तरह के संचालन के लिए पुरानी एपीआई के व्यवहार को बिल्कुल अनुकरण करना स्पष्ट रूप से नए एपीआई के डिजाइन में एक महत्वपूर्ण लक्ष्य नहीं माना जाता था। यह देखते हुए कि एनओओ फाइल सिस्टम एपीआई का मुख्य लक्ष्य नया एपीआई कुछ अलग अंतर्निहित अवधारणाओं और कई नई क्षमताओं के साथ प्रस्तुत करना था, यह मेरे लिए बहुत सामान्य लगता है।

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