जावा की File.renameTo()
समस्याग्रस्त है, विशेष रूप से विंडोज पर, ऐसा लगता है। जैसा कि एपीआई प्रलेखन कहता है,
इस पद्धति के व्यवहार के कई पहलू स्वाभाविक रूप से प्लेटफ़ॉर्म-निर्भर हैं: नाम बदलने की प्रक्रिया एक फ़ाइल सिस्टम से दूसरे फाइल में स्थानांतरित करने में सक्षम नहीं हो सकती है, यह परमाणु नहीं हो सकती है, और यह सफल नहीं हो सकती है यदि गंतव्य सार पथ के साथ एक फ़ाइल पहले से ही मौजूद है। रिटर्न मान हमेशा यह सुनिश्चित करने के लिए जांचना चाहिए कि नाम बदलने का ऑपरेशन सफल रहा।
मेरे मामले में, एक अपग्रेड प्रक्रिया के हिस्से के रूप में, मुझे एक निर्देशिका को स्थानांतरित करने (नाम बदलने) की आवश्यकता है जिसमें डेटा के गीगाबाइट्स (बहुत सारे उपनिर्देशिका और अलग-अलग आकार की फाइलें) हो सकते हैं। चाल हमेशा एक ही विभाजन / ड्राइव के भीतर की जाती है, इसलिए डिस्क पर सभी फ़ाइलों को भौतिक रूप से स्थानांतरित करने की कोई वास्तविक आवश्यकता नहीं है।
वहाँ नहीं होना चाहिए निर्देशिका की सामग्री के किसी भी फाइल ताले स्थानांतरित करने की हो, लेकिन अभी भी, अक्सर, renameTo () अपना काम और रिटर्न झूठी करने के लिए विफल रहता है। (मैं सिर्फ अनुमान लगा रहा हूं कि शायद कुछ फ़ाइल ताले विंडोज पर कुछ मनमाने ढंग से समाप्त हो जाते हैं।)
वर्तमान में मेरे पास एक फालबैक विधि है जो कॉपी करने और हटाने का उपयोग करती है, लेकिन यह बेकार है क्योंकि फ़ोल्डर के आकार के आधार पर इसमें बहुत समय लग सकता है । मैं इस तथ्य पर भी विचार कर रहा हूं कि उपयोगकर्ता संभावित रूप से घंटों प्रतीक्षा करने से बचने के लिए फ़ोल्डर को मैन्युअल रूप से स्थानांतरित कर सकता है। लेकिन राइट वे स्पष्ट रूप से कुछ स्वचालित और त्वरित होगा।
तो मेरा सवाल यह है कि क्या आप विंडोज पर जावा के साथ एक त्वरित चाल / नाम बदलने के लिए एक वैकल्पिक, विश्वसनीय दृष्टिकोण जानते हैं , या तो सादे JDK या कुछ बाहरी पुस्तकालय के साथ। या यदि आप किसी दिए गए फ़ोल्डर और उसकी सभी सामग्रियों (संभवतः हजारों व्यक्तिगत फ़ाइलों) के लिए किसी भी फ़ाइल ताले का पता लगाने और जारी करने का एक आसान तरीका जानते हैं , तो यह भी ठीक होगा।
संपादित करें : इस विशेष मामले में, ऐसा लगता है कि हम renameTo()
कुछ और चीजों को ध्यान में रखते हुए उपयोग कर रहे हैं; इस उत्तर को देखें ।