2010-01-06 19 views
8

मेरी आखिरी पोस्ट को रद्द करने के बाद, मुझे समस्या का स्रोत मिला है। मैंनाम बदलने के बिना फ़ाइल का नाम बदलना() - जावा

a.renameTo(b) 

का उपयोग कर रहा हूं जब बी मौजूद नहीं है। इसका कारण यह नहीं है क्योंकि एक प्रतीकात्मक लिंक है इसलिए यदि बी /usr/name/folder/file है, तो बी वास्तव में /mnt/MountTest है क्योंकि symlink उस निर्देशिका में है।

तो सवाल यह है कि क्या स्ट्रिंग मान का उपयोग कर जावा में फ़ाइल का नाम बदलने का कोई वैकल्पिक तरीका है? यदि नहीं, तो यह नाम बदलने की प्रक्रिया अलग-अलग कैसे हो सकती है?

उत्तर

5

एक नाम बदल जाएगा ... अगर यह एक ही फाइल सिस्टम पर था।

यदि कोई नाम बदलता है() विफल रहता है, तो आपको इसे नए स्थान पर कॉपी करने की आवश्यकता होगी, फिर मूल को हटा दें।

3

समस्या यह नहीं है कि एक सिम्लिंक शामिल है; समस्या यह है कि आप परमाणु रूप से फाइल सिस्टम में नाम बदल नहीं सकते हैं। मेटा-समस्या यह है कि जावा फ़ाइल संचालन बुरी तरह से डिज़ाइन किए गए हैं, और उचित अपवाद नहीं फेंकते हैं, और कुछ विफल होने पर कोई त्रुटि कोड प्रदान नहीं करते हैं!

1

कैसे के बारे में:

a.renameTo(new File("/your/path/here/"); 
+0

कि क्योंकि फ़ाइल नई फ़ाइल पथ में मौजूद नहीं है काम नहीं करेगा ... नाम का उपयोग "एमवी" की नकल करने के लिए किया जाता है, अनिवार्य रूप से फ़ाइल को एक निर्देशिका से दूसरी निर्देशिका में ले जाया जाता है – Hristo

+1

@ हिस्टो: दरअसल, यही कारण है कि मुझे समस्याएं हुईं: लोग नाम बदलने का वर्णन करते हैं "एमवी" के बराबर के रूप में । एमवी फाइल सिस्टम के बारे में पता है, जबकि नाम बदलें नहीं है। यदि आप एक डिस्क/विभाजन से दूसरे में एमवी करने का प्रयास करते हैं, तो यह एक सीपी और आरएम अनुक्रम के रूप में कार्य करता है, जो नाम बदलता नहीं है। – Ken

4

मुझे लगता है कि आप भ्रमित बातें हैं। एक java.util.File कुछ फाइल सिस्टम पर एक फ़ाइल का प्रतिनिधित्व नहीं करता है। यह एक फ़ाइल के पथ का प्रतिनिधित्व करता है।

5

फाइलों का नामकरण फाइल सिस्टम में अत्यधिक समस्याग्रस्त है। http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4073756 देखें। बग रिपोर्ट के कमेंटर्स ने कुछ नमूना कोड पोस्ट किए और यह भी बताया कि आप Process.exec का उपयोग कर सकते हैं। दोनों अपाचे कॉमन्स आईओ और और गूगल अमरूद सुरक्षित रूप से और साथ ही फाइलों हिल के लिए उपयोगिताओं है:

+1

अपाचे लिंक मर चुका है, कृपया अपडेट करें। – saikosen