मैं एप्लिकेशन वर्कबेंच के साथ सिंक्रनाइज़ेशन डेटा फ़ाइलों के लिए WatchService
का उपयोग कर रहा हूं। जब मैं देखे गए निर्देशिका का नाम बदलता/स्थानांतरित करता हूं तो मुझे कोई ईवेंट नहीं मिलता है और न ही वॉचकी अमान्य नहीं होगा। मुझे अभी भी नामित निर्देशिका से घटनाएं मिलती हैं, लेकिन जहां तक मुझे पता है कि WatchKey.watchable()
के अलावा वॉचकी के वास्तविक पथ को खोजने का कोई तरीका नहीं है, हालांकि यह अभी भी मूल निर्देशिका पथ लौटाता है। मैं परिवर्तन के खिलाफ देखे गए निर्देशिका को लॉक करने की आवश्यकता से बचना चाहता हूं क्योंकि मैं जितना संभव हो उतना हल्का वजन रखना चाहता हूं।जावा 7 वॉच सर्विस - वास्तविक देखे गए निर्देशिका का नाम बदलने/स्थानांतरित करने के लिए
मैं विंडोज 7
पर JDK 7u10 के साथ इस समस्या का अनुभव किया है निर्देशिका ताला लगा या रूट के सभी निर्देशिकाओं देख के बिना आप इस समस्या के लिए किसी भी तरीके को जानते हैं?
अद्यतन
लिनक्स पर मैं एक ही व्यवहार देखा है।
अब तक ऐसा लगता है कि मेरे पास अब तीन विकल्प हैं।
1) उपयोगकर्ता के अनुशासन पर निर्भर है कि वह डेटा निर्देशिकाओं को स्थानांतरित नहीं करेगा। मुझे वास्तव में यह विकल्प पसंद नहीं हैं क्योंकि इससे अपरिभाषित व्यवहार हो सकता है।
2) और अधिक व्यापक अमानक देशी पुस्तकालय
3) बेहतर निर्देशिकाओं पर नजर रखने वाले की पदानुक्रम बनाएं का प्रयोग करें। यह इस घटना के बाद केवल ENTRY_DELETE
ईवेंट स्वीकार करेगा (या OVERFLOW
) वास्तविक दृश्य निर्देशिका को स्थानांतरित या हटाए जाने के समय प्रकट होना चाहिए और इस प्रकार अमान्य।
जावाडोक यह बताता है कि यह है कि के लिए मूल रूप से उपलब्ध तंत्र का उपयोग करता है, तो आप की कोशिश की और कैसे खोज करते Win7 के तंत्र इस मामले में कार्य करता है है ? – fge
विंडोज़ पर मूल तंत्र निर्देशिका हैंडल का उपयोग करता है जो निर्देशिका का नाम बदलकर/स्थानांतरित होने पर बदला नहीं जाता है लेकिन विशिष्ट घटना भेजी जाती है। यह कोई मुद्दा नहीं होगा लेकिन जावा में मुझे इन विंडोज़ विशिष्ट घटनाओं का पता लगाने का कोई तरीका नहीं दिखता है और न ही वास्तविक निर्देशिका संभाल मूल्य प्राप्त करने और जांचने का कोई तरीका नहीं है। – rjezek