Dosyayı dahili depolamadan sil


96

Dahili depolamada depolanan resimleri silmeye çalışıyorum. Şimdiye kadar şunu buldum:

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

Ve bu, şu şekilde cevaplanan başka bir sorudan :

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

Örneğim her zaman yanlış döndürür. fx 2930.jpgTutulma sırasında DDMS'deki dosyayı görebiliyorum .

Yanıtlar:


139

Bir getFilesDir()şekilde işe yaramadı. Tüm yolu ve dosya adını döndüren bir yöntem kullanmak istenen sonucu verdi. İşte kod:

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

Nerede inputHandle.getImgPath(id)olduğunu filePath
Pratik Butani

45

Context.deleteFile () denediniz mi?


Contex.deletFile () ile çalışmayan bir varyantı denedim. Aşağıda işe yaradığı görülüyor.
Crunch

@ user661543 ih.getImgPath () tarafından döndürülen tam yol nedir? Dosyayı silmek için argüman olarak ne geçtiniz? Yukarıdaki yöntem işe yaramadıysa, büyük olasılıkla dosyanızı uygulama paketinin dışında sakladı. Veya bağımsız değişken olarak yanlış dosya adı vermiş olabilirsiniz.
Konstantin Burov

+1 Yazılan dosyayı kaldırmanın en basit yolunew OutputStreamWriter(context.openFileOutput(fileName, Context.MODE_PRIVATE)).write(data);
Eugen

19

Bu benim için çalışıyor:

Java

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

MediaScannerConnection.scanFile(context,
                new String[]{file.toString()},
                new String[]{file.getName()},null);

Kotlin

val file = File(photoPath) 
file.delete()

MediaScannerConnection.scanFile(context, arrayOf(file.toString()),
      arrayOf(file.getName()), null)

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

Bu File dir = getFilesDir();bir File nesnesi isteği olduğundan kod çalışmıyor. Dizininizin yolunu bildiren Dize'yi almaya çalışıyorsunuz, bu nedenle 'dir' i bir Dize olarak bildirmeniz ve ardından dizinin String biçimindeki mutlak yolunun bu bilgilere erişimi olan kurucu tarafından döndürülmesini istemeniz gerekir. .


10

Ayrıca kullanabilirsin: file.getCanonicalFile().delete();


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

benim durumumda çalışmıyor.

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

her zaman yanlış döndürür.

Sorun aşağıdaki kod kullanılarak çözüldü:

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

Teşekkür mesajı bırakamayacağımı biliyorum ama .... Seni çok seviyorum !!!!! TEŞEKKÜRLER !
kinghomer

son çalışan
Rahul Gaur

2

Denedin getFilesDir().getAbsolutePath()mi

File nesnesini tam bir yolla başlatarak sorununuzu çözmüş gibi görünüyor. Bunun da işe yarayacağına inanıyorum.


0

Bu eski bir konu, ancak deneyimlerimi de ekleyeceğim, belki birisi bunu faydalı buluyor

>     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

çözüm1:

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

burada İçerik çözümleyiciyi başlatıyorum ve bu URI'nin geçirilen parametresiyle siliyorum

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

çözüm2 (bu sefer kafadan ilk çözümüm bunu biliyorum): içerik çözümleyici var ...

              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 ();
            }

Umarım bu, mutlu kodlama yapan birine yardımcı olur

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.