आंतरिक संग्रहण से फ़ाइल हटाएं


95

मैं आंतरिक भंडारण में संग्रहीत छवियों को हटाने की कोशिश कर रहा हूं। मैं अब तक इसके साथ आया हूँ:

File dir = getFilesDir();
File file = new File(dir, id+".jpg");
boolean deleted = file.delete();

और यह एक अन्य प्रश्न से है, जिसके साथ उत्तर दिया गया था :

File dir = getFilesDir();
File file = new File(dir, "my_filename");
boolean deleted = file.delete();

मेरा उदाहरण हमेशा गलत है। मैं fx 2930.jpgग्रहण में फाइल डीडीएमएस में देख सकता हूं ।

जवाबों:


139

getFilesDir()किसी भी तरह काम नहीं किया। एक विधि का उपयोग करना, जो पूरे रास्ते को वापस करता है और फ़ाइल नाम ने वांछित परिणाम दिया। यहाँ कोड है:

File file = new File(inputHandle.getImgPath(id));
boolean deleted = file.delete();

फाइलपाथ कहां inputHandle.getImgPath(id)है
प्रतीक बुटानी

45

क्या आपने Context.deleteFile () की कोशिश की है ?


Contex.deletFile () के साथ एक संस्करण की कोशिश की, जो काम नहीं किया। नीचे काम करने के लिए लग रहा था।
क्रंच

@ user661543 ih.getImgPath () द्वारा पूर्ण पथ क्या लौटाया गया है? फ़ाइल को हटाने के तर्क के रूप में आप क्या पारित करेंगे? यदि ऊपर दी गई विधि काम नहीं करती है, तो संभवत: आपकी फ़ाइल को एप्लिकेशन पैकेज से संग्रहीत किया जाता है। या आप एक तर्क के रूप में गलत फ़ाइल नाम पारित कर सकते हैं।
कॉन्स्टेंटिन बुरोव

+1 यह सरल तरीका है जिसके माध्यम से लिखी गई फाइल को हटा देंnew OutputStreamWriter(context.openFileOutput(fileName, Context.MODE_PRIVATE)).write(data);
यूजेन

18

यह मेरे लिए काम करता है:

File file = new File(photoPath);
file.delete();

context.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.fromFile(file)));

14
String dir = getFilesDir().getAbsolutePath();
File f0 = new File(dir, "myFile");
boolean d0 = f0.delete(); 
Log.w("Delete Check", "File deleted: " + dir + "/myFile " + d0);

कोड File dir = getFilesDir();काम नहीं करता है क्योंकि यह फ़ाइल ऑब्जेक्ट के लिए एक अनुरोध है। आप स्ट्रिंग को पुनः प्राप्त करने का प्रयास कर रहे हैं जो आपकी निर्देशिका के लिए मार्ग की घोषणा करता है, इसलिए आपको स्ट्रिंग के रूप में 'dir' घोषित करने की आवश्यकता है, और फिर अनुरोध करें कि स्ट्रिंग के रूप में निर्देशिका का निरपेक्ष पथ उस जानकारी तक पहुंच वाले निर्माता द्वारा वापस किया जाए। ।


10

आप भी उपयोग कर सकते हैं: file.getCanonicalFile().delete();


2

क्या आपने कोशिश की है getFilesDir().getAbsolutePath()?

लगता है कि आपने फ़ाइल ऑब्जेक्ट को पूर्ण पथ के साथ प्रारंभ करके आपकी समस्या को ठीक कर दिया है। मुझे विश्वास है कि यह भी चाल चलेगा।


0

यह एक पुराना विषय है, लेकिन मैं अपना अनुभव जोड़ूंगा, हो सकता है कि कोई इसे मददगार मिले

>     2019-11-12 20:05:50.178 27764-27764/com.strba.myapplicationx I/File: /storage/emulated/0/Android/data/com.strba.myapplicationx/files/Readings/JPEG_20191112_200550_4444350520538787768.jpg//file when it was created

2019-11-12 20:05:58.801 27764-27764/com.strba.myapplicationx I/File: content://com.strba.myapplicationx.fileprovider/my_images/JPEG_20191112_200550_4444350520538787768.jpg //same file when trying to delete it

solution1:

              Uri uriDelete=Uri.parse (adapter.getNoteAt (viewHolder.getAdapterPosition ()).getImageuri ());//getter getImageuri on my object from adapter that returns String with content uri

यहाँ मैं सामग्री रिज़ॉल्वर को इनिशियलाइज़ करता हूँ और इसे उस यूआरआई के पारित पैरामीटर के साथ हटाता हूँ

            ContentResolver contentResolver = getContentResolver ();
            contentResolver.delete (uriDelete,null ,null );

solution2 (इस समय में मेरा पहला समाधान-सिर से मुझे पता है कि): सामग्री रिज़ॉल्वर मौजूद है ...

              String path = "/storage/emulated/0/Android/data/com.strba.myapplicationx/files/Readings/" +
                    adapter.getNoteAt (viewHolder.getAdapterPosition ()).getImageuri ().substring (58);

            File file = new File (path);
            if (file != null) {
                file.delete ();
            }

आशा है कि यह किसी को खुश कोडिंग में मददगार होगा


0
File file = new File(getFilePath(imageUri.getValue())); 
boolean b = file.delete();

मेरे मामले में काम नहीं कर रहा है।

boolean b = file.delete();                 // returns false
boolean b = file.getAbsolutePath.delete(); // returns false 

हमेशा झूठा लौटता है।

नीचे दिए गए कोड का उपयोग करके समस्या का समाधान किया गया है:

ContentResolver contentResolver = getContentResolver();
contentResolver.delete(uriDelete, null, null);
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.