2011-11-20 12 views
8

मैं यह जानना चाहता हूं कि कोई फ़ाइल या निर्देशिका हटा दी गई है या नहीं। जाहिर है, मैं Files.isDirectory (पथ) और फ़ाइलों के बराबर का उपयोग नहीं कर सकता, क्योंकि फ़ाइल/निर्देशिका पहले ही हटा दी गई है।वॉच सेवा/हटाना/फ़ाइल या निर्देशिका?

मैंने फ़ाइल परिवर्तनों के लिए या निर्देशिका परिवर्तनों के लिए देखने के लिए दो वॉच सेवा सेवा का उपयोग करने के बारे में सोचा, तो मुझे हर समय पता है कि यह फ़ाइल या निर्देशिका है। दुख की बात है कि मुझे एक उचित विधि नहीं मिल रही है।

संपादित करें: मुझे लगता है कि फ़ाइल नाम बनाम निर्देशिकाओं के स्ट्रिंग प्रस्तुति की जांच के संबंध में कोई अन्य समाधान त्रुटि प्रवण है।

+1

क्या आपने [इस] (http://docs.oracle.com/javase/tutorial/essential/io/notification.html) को आजमाया था? – home

+0

यह नहीं देख सकता कि यह कैसे मदद करता है (वॉच सर्विस का उपयोग करने से पहले इसे पढ़ा है), लेकिन शायद मैं अंधा हूं? ;-) – Johannes

+0

एचएम, शायद मैं आपके प्रश्न को भी समझ नहीं पाया? आप किसी दिए गए निर्देशिका में 'सुनवाई' पर सेवा पंजीकृत कर सकते हैं - उसमें क्या समस्या है? – home

उत्तर

2

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

जब आप अपना घड़ी लूप शुरू करते हैं तो आप इस मेटाडेटा स्टोर को पॉप्युलेट कर सकते हैं - और अपने मेटाडेटा स्टोर को अद्यतित रखने के लिए अपने वॉचर को ENTRY_CREATE और ENTRY_MODIFY के साथ बढ़ाएं क्योंकि निर्देशिका को देखा जा रहा है, जबकि अन्य परिवर्तन किए जाते हैं।

अनुमोदित, यह इस डेटा को पकड़ने के लिए स्मृति में कुछ अतिरिक्त ओवरहेड के बिना नहीं होगा, लेकिन अधिकांश उपयोग मामलों के लिए, यह बल्कि महत्वहीन होना चाहिए।

+0

अच्छा विचार है, लेकिन यह मेरे प्रस्तावित समाधान की तुलना में अधिक जला हुआ लगता है। खैर, मैं एक और समाधान के बारे में सोच नहीं सकता। – Johannes

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