एसडी कार्ड से फाइल कैसे डिलीट करें?


131

मैं ईमेल के लिए अनुलग्नक के रूप में भेजने के लिए एक फ़ाइल बना रहा हूं। अब मैं ईमेल भेजने के बाद छवि को हटाना चाहता हूं। क्या फ़ाइल को हटाने का कोई तरीका है?

मैंने कोशिश की है, myFile.delete();लेकिन इसने फ़ाइल को नहीं हटाया।


मैं एंड्रॉइड के लिए इस कोड का उपयोग कर रहा हूं, इसलिए एसडी कार्ड का उपयोग करने के लिए प्रोग्रामिंग भाषा सामान्य एंड्रॉइड तरीकों का उपयोग करके जावा है। मैं फ़ाइल को onActivityResultविधि में हटा रहा हूं , जब Intentईमेल भेजने के बाद स्क्रीन पर वापस आ जाता है।


आपको समस्या के बारे में अधिक जानकारी प्रदान करने की आवश्यकता है, जैसे कि आप किस भाषा का उपयोग कर रहे हैं, आप एसडी कार्ड का उपयोग कैसे कर रहे हैं, आदि
अमोक

क्या आप डिस्क में परिवर्तन कर रहे हैं?
चार्ल्स मा

10
@ मुझे लगता है कि यह मान लेना सुरक्षित है कि वह जावा का उपयोग कर रहा है क्योंकि उसने निर्दिष्ट नहीं किया है।
जेरेमी लोगान

बहुत ही संदेहास्पद लगता है अगर आप मुझसे पूछें ...
Studocwho

जवाबों:


359
File file = new File(selectedFilePath);
boolean deleted = file.delete();

जहाँ चुना गयाफ़ाइल फ़ाइल का पथ है जिसे आप हटाना चाहते हैं - उदाहरण के लिए:

/sdcard/YourCustomDirectory/ExampleFile.mp3


मुझे लगता है कि इनर चिल्ड्रन को डिलीट नहीं किया जाता है .. आपको सभी इनर चिल्ड को डिलीट करना होगा। मेरा जवाब नीचे दें ..
Zar E Ahmer

2
दुर्भाग्य से यह एंड्रॉइड 4.4+ पर काम नहीं करेगा। नीचे मेरा जवाब देखें।
स्टेवो.मिट

मुझे समझ नहीं आ रहा है कि यह काम कितने लोगों के लिए है। एंड्रॉइड स्टूडियो में "डिलीट" किया गया है।
TheonlyAnil

हाँ, मैं "फाइल: /// स्टोरेज / ..." जो काम नहीं कर रहा था जैसे पथ भेज रहा था
Jemshit Iskenderov

1
@ stevo.mit आपको समाधान मिल गया? मैं भी एक ही समस्या का सामना कर रहा हूँ एंड्रॉइड 4.4+ से ऊपर एसडीकार्ड से फ़ाइल को हटा नहीं सकता। लेकिन एक ही कोड 4.3 /
hasnain_ahmad

79

इसके अलावा आपको अनुमति देनी होगी यदि आप> 1.6 एसडीके का उपयोग कर रहे हैं

uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"

में AndroidManifest.xmlफ़ाइल


लेकिन हटाने योग्य एसडी कार्ड भंडारण के लिए भी आपको जरूरत हैContentResolver
user25

35

एंड्रॉइड 4.4+ के लिए बदलें

Apps का कर रहे हैं अनुमति नहीं करने के लिए लिखने (हटाने के लिए, संशोधित ...) के लिए बाहरी भंडारण को छोड़कर उनके लिए पैकेज विशेष निर्देशिका।

Android प्रलेखन राज्यों के रूप में:

"ऐप्स को माध्यमिक बाहरी संग्रहण उपकरणों को लिखने की अनुमति नहीं दी जानी चाहिए, सिवाय उनके पैकेज-विशिष्ट निर्देशिकाओं में सिवाय संश्लेषित अनुमतियों के।"

हालाँकि बुरा वर्कअराउंड मौजूद है (नीचे कोड देखें) । सैमसंग गैलेक्सी एस 4 पर परीक्षण किया गया है, लेकिन यह फिक्स सभी उपकरणों पर काम नहीं करता है। इसके अलावा, मैं एंड्रॉइड के भविष्य के संस्करणों में उपलब्ध होने वाले इस समाधान पर भरोसा नहीं करूंगा

बाह्य संग्रहण अनुमतियों में परिवर्तन (4.4+) की व्याख्या करने वाला एक शानदार लेख है

आप यहां वर्कअराउंड के बारे में अधिक पढ़ सकते हैं । समाधान स्रोत कोड इस साइट से है

public class MediaFileFunctions 
{
    @TargetApi(Build.VERSION_CODES.HONEYCOMB)
    public static boolean deleteViaContentProvider(Context context, String fullname) 
    { 
      Uri uri=getFileUri(context,fullname); 

      if (uri==null) 
      {
         return false;
      }

      try 
      { 
         ContentResolver resolver=context.getContentResolver(); 

         // change type to image, otherwise nothing will be deleted 
         ContentValues contentValues = new ContentValues(); 
         int media_type = 1; 
         contentValues.put("media_type", media_type); 
         resolver.update(uri, contentValues, null, null); 

         return resolver.delete(uri, null, null) > 0; 
      } 
      catch (Throwable e) 
      { 
         return false; 
      } 
   }

   @TargetApi(Build.VERSION_CODES.HONEYCOMB)
   private static Uri getFileUri(Context context, String fullname) 
   {
      // Note: check outside this class whether the OS version is >= 11 
      Uri uri = null; 
      Cursor cursor = null; 
      ContentResolver contentResolver = null;

      try
      { 
         contentResolver=context.getContentResolver(); 
         if (contentResolver == null)
            return null;

         uri=MediaStore.Files.getContentUri("external"); 
         String[] projection = new String[2]; 
         projection[0] = "_id"; 
         projection[1] = "_data"; 
         String selection = "_data = ? ";    // this avoids SQL injection 
         String[] selectionParams = new String[1]; 
         selectionParams[0] = fullname; 
         String sortOrder = "_id"; 
         cursor=contentResolver.query(uri, projection, selection, selectionParams, sortOrder); 

         if (cursor!=null) 
         { 
            try 
            { 
               if (cursor.getCount() > 0) // file present! 
               {   
                  cursor.moveToFirst(); 
                  int dataColumn=cursor.getColumnIndex("_data"); 
                  String s = cursor.getString(dataColumn); 
                  if (!s.equals(fullname)) 
                     return null; 
                  int idColumn = cursor.getColumnIndex("_id"); 
                  long id = cursor.getLong(idColumn); 
                  uri= MediaStore.Files.getContentUri("external",id); 
               } 
               else // file isn't in the media database! 
               {   
                  ContentValues contentValues=new ContentValues(); 
                  contentValues.put("_data",fullname); 
                  uri = MediaStore.Files.getContentUri("external"); 
                  uri = contentResolver.insert(uri,contentValues); 
               } 
            } 
            catch (Throwable e) 
            { 
               uri = null; 
            }
            finally
            {
                cursor.close();
            }
         } 
      } 
      catch (Throwable e) 
      { 
         uri=null; 
      } 
      return uri; 
   } 
}

1
नोट 3 के लिए काम नहीं कर रहा है। मुझे त्रुटि मिली "MediaProvider: /mnt/extSdCard/test.zip नहीं हटा सका"
iscariot

2
मेरे पास 4.4.4 पर एक असंबद्ध मोटो एक्स है और मुझे sdcard / mydirectory को लिखने में कोई समस्या नहीं है
Rob

"दुर्भाग्य से यह किटकैट के नए संस्करणों पर अधिक काम नहीं करता है, इसे सभी बंद कर दिया गया है।" लेखक "ग्रिस्लर (लेखक)" के हवाले से
HendraWD

एंड्रॉइड खुद को अधिक से अधिक बंद कर रहा है। हम iOS की एक बदसूरत नकल के साथ समाप्त होगा !!
फैंटमैक्स

यह मेरे लिए विफल रहता है (Android 7.1)। यह हमेशा रिटर्न falseकरता है और फ़ाइल को डिलीट नहीं करता है :-(
Spikatrix

18

Android संदर्भ में निम्न विधि है:

public abstract boolean deleteFile (String name)

मेरा मानना ​​है कि यह वही होगा जो आप ऊपर सूचीबद्ध सही ऐप प्रीमियर के साथ चाहते हैं।


3
यह सही उत्तर होना चाहिए। context.deleteFile(filename);
लिसांड्रो

11

फ़ाइल के सभी बच्चों को पुन: हटा दें ...

public static void DeleteRecursive(File fileOrDirectory) {
    if (fileOrDirectory.isDirectory()) {
        for (File child : fileOrDirectory.listFiles()) {
            DeleteRecursive(child);
        }
    }

    fileOrDirectory.delete();
}

9

यह मेरे लिए काम करता है: (गैलरी से चित्र हटाएं)

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

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

2
संदर्भ क्या करता है ।endendroad () क्या करते हैं?
मेगानेट्रोन

मूल रूप से, यह इस आशय से मेल खाने वाले सभी रिसीवरों को आशय (प्रदर्शन किया जाने वाला ऑपरेशन) भेजता / प्रसारित करता है। लिंक
जिह डे

6
 public static boolean deleteDirectory(File path) {
    // TODO Auto-generated method stub
    if( path.exists() ) {
        File[] files = path.listFiles();
        for(int i=0; i<files.length; i++) {
            if(files[i].isDirectory()) {
                deleteDirectory(files[i]);
            }
            else {
                files[i].delete();
            }
        }
    }
    return(path.delete());
 }

यह कोड आपकी मदद करेगा .. और एंड्रॉइड मैनिफेस्ट में आपको संशोधन करने की अनुमति लेनी होगी।

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

फाइलें [] शून्य हो सकती हैं:file.exists:true file.isDirectory:true file.canRead:false file.canWrite:false
ilw

मुझे लगता है कि आप लोग पूरी तरह से अनजान हैं कि कुछ एंड्रॉइड फोन एसडी कार्ड के लिए लिखने की पहुंच को प्रतिबंधित करते हैं।


1

क्षमा करें: साइट सत्यापन के कारण मेरे कोड में पहले कोई गलती है।

String myFile = "/Name Folder/File.jpg";  

String myPath = Environment.getExternalStorageDirectory()+myFile;  

File f = new File(myPath);
Boolean deleted = f.delete();

मुझे लगता है कि स्पष्ट है ... सबसे पहले आपको अपना फ़ाइल स्थान जानना होगा। दूसरा ,,, Environment.getExternalStorageDirectory()एक ऐसा तरीका है जो आपके ऐप डायरेक्टरी को प्राप्त करता है। अंत में क्लास फाइल जो आपकी फाइल को संभालती है ...


1

मेरे पास 4.4 पर चलने वाले एप्लिकेशन के साथ एक समान समस्या थी। मैंने जो किया वह हैक था।

मैंने फ़ाइलों का नाम बदला और उन्हें अपने आवेदन में अनदेखा कर दिया।

अर्थात।

File sdcard = Environment.getExternalStorageDirectory();
                File from = new File(sdcard,"/ecatAgent/"+fileV);
                File to = new File(sdcard,"/ecatAgent/"+"Delete");
                from.renameTo(to);

0

इसने मेरे लिए काम किया।

String myFile = "/Name Folder/File.jpg";  

String my_Path = Environment.getExternalStorageDirectory()+myFile;  

File f = new File(my_Path);
Boolean deleted = f.delete();

0
private boolean deleteFromExternalStorage(File file) {
                        String fileName = "/Music/";
                        String myPath= Environment.getExternalStorageDirectory().getAbsolutePath() + fileName;

                        file = new File(myPath);
                        System.out.println("fullPath - " + myPath);
                            if (file.exists() && file.canRead()) {
                                System.out.println(" Test - ");
                                file.delete();
                                return false; // File exists
                            }
                            System.out.println(" Test2 - ");
                            return true; // File not exists
                    }

आपको अपने कोड के बारे में कुछ स्पष्टीकरण देना होगा! :)
संकट मकरानी

पढ़ें फ़ाइल getExternalStorageDirectory + को जोड़ें "/ Music /" यह मेरा पथ है -> mypath = / storage / sdcard / Music /। चेक फ़ाइल मौजूद है या कोई मौजूद नहीं है और इसे पढ़ें। मौजूद होने पर हटाएं। यह निर्देशिका संगीत में सभी सूची संगीत को हटा रहा है
Lâm

उत्तर के लिए समान जोड़ें! :)
संकटा मकानी

0

आप एक फ़ाइल को इस प्रकार हटा सकते हैं:

File file = new File("your sdcard path is here which you want to delete");
file.delete();
if (file.exists()){
  file.getCanonicalFile().delete();
  if (file.exists()){
    deleteFile(file.getName());
  }
}

-1
File filedel = new File("/storage/sdcard0/Baahubali.mp3");
boolean deleted1 = filedel.delete();

या, यह आज़माएँ:

String del="/storage/sdcard0/Baahubali.mp3";
File filedel2 = new File(del);
boolean deleted1 = filedel2.delete();

1
आपके दोनों उदाहरण बहुत अधिक हैं। इसके अलावा, सबसे अधिक वोट किया गया उत्तर वास्तव में ऐसा करने के लिए कहता है। यह देख नहीं सकता कि यह उत्तर और क्या प्रश्न जोड़ता है। इसके अलावा, यह एंड्रॉइड किटकैट IIRC से एक बाहरी भंडारण (एसडी कार्ड की तरह) में फाइलों के लिए काम नहीं करेगा
स्पिकैट्रिक्स
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.