2014-09-25 10 views
5

मेरे पास "रीसेट" नामक मेरे ऐप में एक बटन है जो एक संपूर्ण फ़ोल्डर (उपयोगकर्ता फ़ोल्डर) हटा देता है। उसके बाद, मैं एक ही फ़ोल्डर को फिर से बनाने की कोशिश कर रहा हूं और पहली बार जब मैं इसे कोशिश करता हूं, तो यह मुझे फ़ोल्डर बनाने की अनुमति देता है, लेकिन दूसरी बार जब मैं उपयोगकर्ता फ़ोल्डर को रीसेट और फिर से बनाने का प्रयास करता हूं, तो ऐप क्रैश हो जाता है क्योंकि mkdir() फ़ोल्डर नहीं बनाया और मैंने उस फ़ोल्डर पर डेटाबेस बनाने का प्रयास किया। लेकिन, अजीब चीज यह है कि, दुर्घटनाग्रस्त होने के बाद, फ़ोल्डर बनाया गया है।mkdir() फ़ोल्डर को हटाने के बाद झूठी रिटर्न

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 

मैं दोनों तरीकों की कोशिश की है:

f.mkdir(); 
f.mkdirs(); 

क्या मैं गलत कर सकता है

मैं अनुमति है? कोई उपाय?

+0

मैंने इस बारे में बहुत सारे प्रश्न देखे हैं, लेकिन उनमें से कोई भी मेरी मदद नहीं करता है। –

+1

** एक ही फ़ोल्डर को हटाने और पुनर्निर्माण करने के बजाय **, आप ** ** ** क्यों नहीं खाली करते? यह एक स्मार्ट (और अनुकूलित) समाधान है। –

+0

मैंने इसके बारे में सोचा है, लेकिन जो भी मैं चाहता हूं वह पूरी तरह से सभी उपयोगकर्ता फ़ोल्डर को हटा देता है, मैं नहीं जानता कि यह बेकार फ़ोल्डर है, भले ही यह खाली हो। मुझे लगता है कि यह एक "गंदे" समाधान है। हालांकि मैं इसे ठीक कर सकता हूं अगर मैं इसे ठीक नहीं कर सकता। –

उत्तर

0

मुझे लगता है कि ऐसा इसलिए है क्योंकि आप फ़ोल्डर बनाने के लिए एक विधि बुला रहे हैं, फ़ोल्डर बनने से पहले आप उस फ़ोल्डर में डीबी बनाने की कोशिश कर रहे हैं!

संभव समाधान

डेटाबेस बनाने के बाद फ़ोल्डर सफलतापूर्वक बन जाने का प्रयास करें। और डेटाबेस बनाने के दौरान एक बार फिर जांचें कि क्या वह फ़ोल्डर/पथ मौजूद है या नहीं।

+0

मैंने पहले फ़ोल्डर बनाने की कोशिश की है, लेकिन जैसा कि मैंने कहा, mkdir काम नहीं करता है और झूठी रिटर्न देता है। –

+0

mkdir और mkdirs झूठी वापसी अगर निर्देशिका पहले से मौजूद है, तो विफलता के लिए यह एक कारण हो सकता है। यदि आप जावा 7 का उपयोग कर रहे हैं, तो आप फाइल क्लास का उपयोग कर सकते हैं। यह बहुत अच्छा विलुप्त होने के साथ त्रुटि पर IOException फेंकता है Files.createDirectory (file.toPath()); – Rohit

+0

क्या मैं एंड्रॉइड पर जावा 7 का उपयोग कर सकता हूं? मुझे ऐसा नहीं लगता। –

3

मुझे भी एक ही समस्या का सामना करना पड़ा। लेकिन, आखिर में, मुझे लगता है कि मुझे एक समाधान मिला (कामकाज हो सकता है)।

जब आप निर्देशिका हटाते हैं, तो इसका नाम बदलें और हटाएं। फिर, आमतौर पर, File.mkdirs() का उपयोग कर निर्देशिका बनाएं। यह ठीक काम करना चाहिए। मैंने अपने मामले में परीक्षण किया। यह काम करता हैं!!!

public static final void renameAndDelete(File fileOrDirectory) { 
    File newFile = new File(fileOrDirectory.getParent() + File.separator 
       + "_" + fileOrDirectory.getName()); 
    fileOrDirectory.renameTo(newFile); 
    delete(newFile); 
} 
public static final void delete(File fileOrDirectory) { 
    if (fileOrDirectory.isDirectory()) 
     for (File child : fileOrDirectory.listFiles()) 
      delete(child); 

    fileOrDirectory.delete(); 
} 
संबंधित मुद्दे